AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-282382

HappyFace's questions

Martin Hope
HappyFace
Asked: 2024-11-04 00:34:00 +0800 CST

Impedir a propagação do SIGINT do subshell para o shell pai no Zsh

  • 5

Preciso evitar que SIGINT (Ctrl-C) se propague de um subshell para suas funções de shell pai no Zsh.

Aqui está um exemplo mínimo:

function sox-record {
    local output="${1:-$(mktemp).wav}"
    (
        rec "${output}" trim 0 300  # Part of sox package
    )
    echo "${output}"  # Need this to continue executing after Ctrl-C
}

function audio-postprocess {
    local audio="$(sox-record)"
    # Process the audio file...
    echo "${audio}"
}

function audio-transcribe {
    local audio="$(audio-postprocess)"
    # Send to transcription service...
    transcribe_audio "${audio}"  # Never reached if Ctrl-C during recording
}

A solução alternativa atual requer capturar SIGINT em todos os níveis, o que leva a um código repetitivo e sujeito a erros:

function sox-record {
    local output="${1:-$(mktemp).wav}"
    setopt localtraps
    trap '' INT
    (
        rec "${output}" trim 0 300
    )
    trap - INT
    echo "${output}"
}

function audio-postprocess {
    setopt localtraps
    trap '' INT
    local audio="$(sox-record)"
    trap - INT
    # Process the audio file...
    echo "${audio}"
}

function audio-transcribe {
    setopt localtraps
    trap '' INT
    local audio="$(audio-postprocess)"
    trap - INT
    # Send to transcription service...
    transcribe_audio "${audio}"
}

Quando o usuário pressiona Ctrl-C para parar a gravação, eu quero: 1. Que o recsubprocesso termine (funcionando) 2. Que as funções pai continuem executando (requer captura de SIGINT em cada chamador)

Eu sei que:

  • SIGINT é enviado a todos os processos no grupo de processos em primeiro plano
  • O uso setsidcria um novo grupo de processos, mas impede que os sinais cheguem ao filho
  • Adicionar trap '' INTo pai requer que todos os chamadores também capturem SIGINT para evitar propagação.

Existe uma maneira de isolar SIGINT apenas para o subshell sem exigir tratamento de sinal em todas as funções pai? Ou isso é fundamentalmente impossível devido a como os grupos de processos Unix e a propagação de sinal funcionam?


Dei uma olhada nesta pergunta e tentei isto:

function sox-record {
    local output="${1:-$(mktemp).wav}"

    zsh -mfc "rec "${output}" trim 0 300" </dev/null >&2 || true

    echo "${output}"
}

Embora isso funcione quando eu apenas chamo sox-record, quando eu chamo uma função pai como audio-postprocess, Ctrl-C não faz nada. (E eu tenho que usar pkillto kill rec.)

function audio-postprocess {
    local audio="$(sox-record)"

    # Process the audio file...
    echo "${audio}"
}

zsh
  • 1 respostas
  • 14 Views
Martin Hope
HappyFace
Asked: 2022-01-20 04:29:53 +0800 CST

O comando time inclui a memória reivindicada por processos bifurcados?

  • 0

Eu quero comparar alguns scripts com o timecomando. Eu estou querendo saber se este comando pega o uso de memória dos processos filho.

command time -f '%M' python my_script.py

Se não, quais são minhas opções? É valgrindadequado para este fim?

Eu também não quero contar duas vezes a memória copy-on-write que não está realmente preenchendo o espaço.

linux memory
  • 2 respostas
  • 66 Views
Martin Hope
HappyFace
Asked: 2019-08-12 22:49:57 +0800 CST

Qual é a maneira idiomática de retornar uma matriz em uma função zsh?

  • 6

tenho essa função

rpargs () {
    local i
    args=()
    for i in "$@"
    do
        test -e "$i" && args+="$(realpath --canonicalize-existing -- "$i")"  || args+="$i"
    done
}

E eu quero voltar args. As únicas maneiras em que consigo pensar são printf '%s\0'dividi-lo por meio de sinalizadores de expansão (0@)ou usar um global como o código acima.

zsh array
  • 2 respostas
  • 2042 Views
Martin Hope
HappyFace
Asked: 2019-08-11 12:18:30 +0800 CST

Como faço para juntar os resultados de uma substituição de comando?

  • 0

Eu quero criar uma lista de arquivos mp3 como a 1.mp3|a 2.mp3.

Eu tentei echo ${(j:|:)$(echo *.mp3)}e algumas variações dele, mas eles não funcionam:

# too much splitting 
01|The|Magic|Finger|01.mp3|02|The|Magic|Finger|02.mp3|03|The|Magic|Finger|03.mp3|04|The|Magic|Finger|04.mp3|05|The|Magic|Finger|05.mp3|06|The|Magic|Finger|06.mp3

# too much quoting
01 The Magic Finger 01.mp3 02 The Magic Finger 02.mp3 03 The Magic Finger 03.mp3 04 The Magic Finger 04.mp3 05 The Magic Finger 05.mp3 06 The Magic Finger 06.mp3

Eu não quero criar funções ou variáveis ​​para fazer isso. (Isso pode ser feito trivialmente.)

zsh command-substitution
  • 3 respostas
  • 110 Views
Martin Hope
HappyFace
Asked: 2019-08-11 01:16:39 +0800 CST

zsh: Variável é desativada sem motivo

  • 1

De alguma forma vfica indefinido após a chamada f.

$ zsh -xc 'v=1; f() { local v; v=2 true; }; f; typeset -p v'
+zsh:1> v=1
+zsh:1> f
+f:0> local v
+f:0> v=2 +f:0> true
+zsh:1> typeset -p v
zsh:typeset:1: no such variable: v

Aqui está a essência do meu relatório de reprodução original.

Enviei um e-mail para [email protected] , mas ainda não recebi nenhuma resposta.

zsh variable
  • 1 respostas
  • 89 Views
Martin Hope
HappyFace
Asked: 2019-08-10 07:53:15 +0800 CST

Como posso definir o valor padrão na substituição de parâmetros como uma matriz de elementos?

  • 1

Estou usando o zsh e tenho esta função:

function timer-raw() {
    # Just think `loop fsayd` is `echo hi` for the purposes of this question.
    eval "sleep $((($1)*60))" && eval ${(q+@)@[2,-1]:-loop fsayd}
}

timer-rawo primeiro argumento de diz quantos minutos esperar; O restante dos argumentos, se presentes, seriam evaleditados como se digitados na linha de comando, após a espera:

timer 3 echo sth
# After 3 minutes, echoes `sth`.

No entanto, se nenhum argumento adicional for fornecido, quero que ele execute o comando padrão loop fsayd:

timer 4
# runs `loop fsayd` after 4 minutes

O problema é que quero loop fsaydser substituído por duas palavras, mas não sei como. Eu tentei essas variações também, mas elas também não funcionaram:

"${(q+@)${@[2,-1]:-loop fsayd}}"
"${(q@)${(q@)=@[2,-1]:-loop fsayd}}"
"${(qq@)=@[2,-1]:-loop fsayd}"

Por "não funcionou", quero dizer que um simples timer 0falharia por um command not found, ou que timer 0 ff hi 'man hi jk k'falhou ao retornar o número correto de argumentos de entrada. ( ff() echo "$#")

Nota: eu não quero usar test -z "${@[2,-1]}".

zsh array
  • 2 respostas
  • 548 Views
Martin Hope
HappyFace
Asked: 2019-08-08 00:37:12 +0800 CST

Remover valores do arquivo separado por NUL

  • 2

Eu tenho uma matriz de valores vque quero remover do arquivo f. fé delimitado por NUL. Como eu prossigo? Tentei usar sd, mas não funcionou .

Exemplo:

Eu tenho este arquivo:

# cat -v $attic
^@this is 1.
this is 2.
this is 3.
^@hi
^@blue boy

E esta variável $i:

# cat -v <<<"$i"
this is 1.
this is 2.
this is 3.

Eu quero um comando que remova $idesse arquivo, resultando em:

^@hi
^@blue boy

Eu tentei FROM="$i" perl -pi -e 's/\0\Q$ENV{FROM}\E//g' "$attic", mas não funciona se $ifor multilinha. Eu tentei, FROM="$i" perl -pi0 -e 's/\0\Q$ENV{FROM}\E//g' "$attic"mas isso não fez nada.

text-processing perl
  • 2 respostas
  • 137 Views
Martin Hope
HappyFace
Asked: 2019-08-07 21:22:26 +0800 CST

zsh: É possível implementar uma `exportação local`?

  • 3

É possível implementar a local exportem zsh? Possivelmente usando tentar e sempre?

Isso cria condições de corrida?

Por "exportação local", quero dizer algo exatamente como uma variável local, que é acessível aos subprocessos (no escopo).

Exemplo:

function a() {
 local export YACY_TIMEOUT=60
 yacy -r -d sth
 }
 export YACY_TIMEOUT=4
 echo "$YACY_TIMEOUT" # 4
 a
 echo "$YACY_TIMEOUT" # 4
environment-variables zsh
  • 3 respostas
  • 323 Views
Martin Hope
HappyFace
Asked: 2019-08-05 08:47:16 +0800 CST

zsh: tratamento de erros inconsistente em atribuições

  • 1

Isto é zsh -f:

Fereidoons-MacBook-Pro% local a=$(jaja) && echo bad
zsh: command not found: jaja
bad
Fereidoons-MacBook-Pro% a=$(jaja) && echo bad
zsh: command not found: jaja
Fereidoons-MacBook-Pro%

Por que localatrapalhar o tratamento de erros?

zsh variable
  • 1 respostas
  • 1011 Views
Martin Hope
HappyFace
Asked: 2019-07-19 07:56:43 +0800 CST

Como adiciono um argumento a $@?

  • 5

Eu gosto de poder ... && add-arg 'something'e ter 'algo' sendo adicionado aos argumentos posicionais, como um inverso shift.

Eu tentei ... && set "$@ something", mas isso não funcionou, embora apenas fazendo set "$@ something"(sem a condição) parecesse funcionar corretamente.

bash zsh
  • 2 respostas
  • 747 Views
Martin Hope
HappyFace
Asked: 2018-12-17 11:37:13 +0800 CST

Zsh: =() substituição com permissão executável

  • 1

Eu preciso dar um arquivo executável para este comando:

aria2c “some-url” —on-download-complete =(echo “!#/usr/bin/env bash
 touch success”)

Isso é possível? Se não, posso implementar algumas funções auxiliares para tornar possível algo semelhante?

linux shell-script
  • 1 respostas
  • 94 Views
Martin Hope
HappyFace
Asked: 2018-12-17 11:09:55 +0800 CST

Shell: É possível dar uma string como um arquivo para um comando?

  • 1

Suponha que temos um comando,

eval-some-language —-path=<filename>

E queremos fazer algo assim:

eval-some-language —-path=“say hello world!
 exit 3”

Eu acho que a seguinte solução pode funcionar para um arquivo e se stdin não for usado para sth else:

eval-some-language —-path=“/dev/stdin” <<<“say hello ...”

Funciona com todos os comandos? Quão portátil é? (Mac OS?)

E há outras maneiras de fazer isso?

Atualização: minha solução, a resposta aceita e =() do zsh não funcionam se o arquivo precisar ser executável. :(

linux bash
  • 1 respostas
  • 47 Views
Martin Hope
HappyFace
Asked: 2018-12-06 12:11:37 +0800 CST

Como armazenar (e carregar) uma matriz zsh String em um arquivo?

  • 4

Eu quero armazenar uma matriz de algumas citações (basicamente, strings do mundo real com novas linhas) em um arquivo. Como posso alcançá-lo? Pensei em configurar o IFS para algo como “xxxxxxxxx74765xxx” (o que nunca ocorrerá nas minhas strings), mas é claro que o IFS só funciona para caracteres únicos.

Eu posso pensar em alguns truques feios para fazer isso (por exemplo, armazenar essa string sem sentido como uma linha entre os elementos, ler o arquivo linha por linha e verificar cada linha em relação a ela e reconstruir a matriz assim.), mas eu apreciarei um pouco mais opiniões experientes.

zsh array
  • 2 respostas
  • 1045 Views
Martin Hope
HappyFace
Asked: 2018-12-03 05:13:15 +0800 CST

Os zargs podem executar aliases?

  • 5

Eu pip install -Uapelidei como pi. Eu quero correr:

zargs ~/scripts/python/**/requirements.txt -- pi -r

Há alguma maneira de fazer isso?

Eu também tentei esta alternativa feia:

zargs ~/scripts/python/**/requirements.txt -- ${aliases[pi]} -r

Mas disse (eval):2: command not found: pip install -U.

Eu imaginei que o zargs deveria ser capaz de fazer exatamente esse tipo de coisa, já que é um zsh embutido.

zsh xargs
  • 1 respostas
  • 203 Views
Martin Hope
HappyFace
Asked: 2018-11-23 22:24:26 +0800 CST

Como coloco um argumento na variável BROWSER?

  • 0

Eu gosto de poder fazer export BROWSER="lynx -cfg=~/.lynx.cfg". Eu tentei isso diretamente e também tentei definir um alias alias lynx="lynx -cfg=~/.lynx.cfg", mas não funcionou. (O que significa que as ferramentas que usam essa variável para iniciar um navegador ainda ignoraram meu arquivo de configuração ou não iniciaram o navegador.)

zsh shell
  • 2 respostas
  • 339 Views
Martin Hope
HappyFace
Asked: 2018-11-23 12:50:06 +0800 CST

O que está acontecendo nesses redirecionamentos MULTIOS?

  • 1

Quando corro 1>&2 echo hi |& grep hi, recebo um oi não colorido seguido por um oi vermelho em uma nova linha. Esta é a mesma saída que 1>&2 echo hi | grep hi. Por que os dois “oi” não são vermelhos no primeiro?

zsh shell
  • 1 respostas
  • 28 Views
Martin Hope
HappyFace
Asked: 2018-11-23 11:23:54 +0800 CST

Como funciona a esponja (da moreutils)?

  • 1

esponja pode “absorver” stdin e gravá-lo atomicamente em um arquivo, permitindo que se faça cat f|sponge a. Eu quero saber exatamente como ele consegue isso. Como ele sabe quando a entrada é concluída?

shell io-redirection
  • 1 respostas
  • 801 Views
Martin Hope
HappyFace
Asked: 2018-10-31 10:40:18 +0800 CST

Como posso abrir um shell no ambiente que o cron (alternativamente iniciado) usa para executar comandos?

  • 0

Estou tentando iniciar o launchd (que é a alternativa do macOS para o cron) para executar um trabalho para mim. Não funciona, enquanto executa os comandos em um bash iniciado com sudo. Tentei redirecionar a saída para arquivos, mas examiná-los também não me esclareceu. Eu gosto de ter acesso a esse ambiente 'primal' que o launchd usa para executar comandos, para que eu possa experimentar diretamente lá e ver o que está faltando.

PS: Aqui está o script que executo no meu job launchd (como root):

#!/usr/bin/env bash
export HOME=/Users/evar
source /users/evar/.bashrc
/Users/evar/anaconda/bin/python /Base/_Code/Misc/hosts/updateHostsFile.py --auto --replace --backup &> /Users/evar/log/hosts.out2
# tmux new -d -s hosts "/Users/evar/anaconda/bin/python /Base/_Code/Misc/hosts/updateHostsFile.py --auto --replace --backup" # I tried this, but sudo tmux kept saying no sessions while logs kept said "duplicate session hosts".
bash shell
  • 1 respostas
  • 201 Views
Martin Hope
HappyFace
Asked: 2018-10-19 04:31:46 +0800 CST

O que `==` faz na expansão zsh?

  • 0

me deparei com este código:

map () {
    eval "$initDocs"
    usage "<lambda-function> [<item>...]"
    example "'<--- \$1 --->'" a b c d
    eval "$doneDocs"
    typeset f="$1"
    shift
    map_ () {
        echo ${(e)==f}
    }
    eval "$loopNow" map_
}

Eu não entendo qual é a diferença entre ${(e)f}e ${(e)==f}.

zsh
  • 1 respostas
  • 36 Views
Martin Hope
HappyFace
Asked: 2018-10-15 20:49:31 +0800 CST

Globs não gananciosos (estendidos) em zsh

  • 1

Eu gosto de fazer globs não gananciosos, mas minhas pesquisas no Google sugerem que isso não é suportado. É este o caso? Em caso afirmativo, por que é o caso?

Por exemplo, eu gostaria de usar um glob não ganancioso em expansões de histórico, por exemplo, ^ff* ^openpara abrir um mp3 anteriormente reproduzido.

zsh wildcards
  • 1 respostas
  • 508 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve