Enviar el proceso a segundo plano y repudiar y salir de la terminal (el operador & y && chocan en zsh)

Enviar el proceso a segundo plano y repudiar y salir de la terminal (el operador & y && chocan en zsh)

Necesito ejecutar un proceso en segundo plano y luego salir de la terminal actual.

El siguiente comando produce un error:

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

He considerado simplemente invocar 'google-chrome-stable &!' y verificar el código de error mediante una declaración if, pero espero identificar una forma más sencilla de lograrlo.

Respuesta1

&!y &&ambos comandos separados, por lo que no puedes combinar ambos, por lo que

google-chrome-stable &! exit

Probablemente sea lo que buscas.

No puede obtener el código de salida hasta que salga el comando en segundo plano...

Respuesta2

El estado de salida devuelto al shell que invoca al iniciar un trabajo en segundo plano essiemprecero:

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

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

... y ambos &!y &&son terminadores de comando. Esto significa que su comando probablemente debería escribirse como

google-chrome-stable &! exit

o como equivalente

google-chrome-stable &!
exit

Solo puede obtener el estado de salida real del trabajo en segundo plano utilizando waitel ID del trabajo (no hay ninguno desde que lo repudió) o el ID del proceso (pero no puede, porque repudió ese proceso y, por lo tanto, es ya no es un proceso que el shell considera un proceso secundario; se elimina de la lista de trabajos actuales del shell).

Si no hubieras repudiado el trabajo, tal vez a través de

google-chrome-stable & chrome_pid=$!

entonces el comando wait $chrome_pideventualmente saldría con el estado de salida de su trabajo en segundo plano, pero no hasta que ese trabajo finalice, ya sea por no poder iniciar o por cerrar el navegador de alguna manera.

información relacionada