Envie o processo para segundo plano e rejeite e saia do terminal (& e && conflito de operadores em zsh)

Envie o processo para segundo plano e rejeite e saia do terminal (& e && conflito de operadores em zsh)

Preciso executar um processo em segundo plano e sair do terminal atual.

O seguinte comando resulta em erro:

> google-chrome-stable &! && exit
zsh: parse error near '&&'

Pensei em simplesmente invocar 'google-chrome-stable &!' e verificar o código de erro por meio de uma instrução if, mas espero identificar uma maneira mais simples de fazer isso.

Responder1

&!e &&ambos os comandos separados, então você não pode combinar os dois, então

google-chrome-stable &! exit

é provavelmente o que você está procurando.

Você não pode obter o código de saída até que o comando em segundo plano saia ...

Responder2

O status de saída retornado ao shell de chamada ao iniciar um trabalho em segundo plano ésemprezero:

% bogus &
[1] 66712
% zsh: command not found: bogus

[1]  + exit 127   bogus
% echo $?
0

... e ambos &!e &&são terminadores de comando. Isso significa que seu comando provavelmente deve ser escrito como

google-chrome-stable &! exit

ou como equivalente

google-chrome-stable &!
exit

Você só pode obter o status de saída real do trabalho em segundo plano usando waito ID do trabalho (não há nenhum, pois você o rejeitou) ou o ID do processo (mas você não pode, porque você rejeitou esse processo e é, portanto, não é mais um processo que o shell considera um processo filho; ele é removido da lista de trabalhos atuais do shell).

Se você não tivesse rejeitado o trabalho, talvez através

google-chrome-stable & chrome_pid=$!

então, o comando wait $chrome_pidacabaria saindo com o status de saída do seu trabalho em segundo plano, mas não até que o trabalho terminasse, seja por não ser possível iniciar ou por você fechar o navegador de alguma forma.

informação relacionada