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 wait
o 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_pid
acabaria 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.