Pega o resultado do subprocesso no Z-shell

0
AAA <options>; CCC AAA <options>

AAA , CCC são comandos diferentes.

Aqui estamos em um script zsh - por exemplo:

vi script.zsh
<...>
AAA <options>; CCC AAA <options>
<...>

Verbose: Corrija-me se estiver errado, CCC AAA <options> AAA <options> estará usando um subshell e, em seguida, criará um processo separado do shell atual ou poderá estar usando o shell atual e criará um subprocesso a partir do processo que executa o script atual.

O problema é que CCC permanecerá ativo depois que script.zsh terminar. Isso causa um problema quando tento chamar algo que como resultado - não o valor de retorno (ele criou algo depois de feito - um objeto recém-criado, por exemplo) de CCC AAA <options> ' AAA <options> INSIDE script.zsh causando not found warning.

Isso está sendo dito, como fazer com que o script.zsh atual possa ver o resultado de 'AAA <options>' ?

Se possível, direcione o Z-shell.

EDITAR: Deve ser:

AAA <options>; CCC AAA <options>
    
por Tuyen Pham 13.09.2018 / 13:50

1 resposta

1

Não,

CCC 'AAA <options>'

Inicia CCC com um argumento literal AAA <options> . Isso é o mesmo em todos os shell. Você pode verificar usando o comando echo no lugar de CCC :

$ echo 'AAA <options>'
AAA <options>

Se você quisesse chamar CCC com a saída (sem os caracteres à direita da nova linha) de AAA como um único argumento, você faria:

CCC "$(AAA <options>)"

Se você quisesse chamar CCC com quantas palavras houver na saída de AAA (espaço, tabulação, nova linha, NUL separado), você faria:

CCC $(AAA <options>)

Em qualquer caso, CCC não será iniciado até que AAA retorne e o script não termine até que CCC tenha retornado.

Para que um script termine antes de um comando retornar, você precisará dele para iniciar esse comando de forma assíncrona, como:

CCC args &

Em qualquer caso, isso é o mesmo em todos os shell, não é zsh específico (exceto para essa divisão no NUL acima).

    
por 13.09.2018 / 18:17