Eu acho que você está interpretando mal o que está acontecendo. Quando você faz:
cmd1 && cmd2
O shell inicia cmd1
em um processo filho, aguarda esse processo e, em seguida, inicia cmd2
se cmd1
sair com um status de saída zero.
Se você pressionar Ctrl + Z , a espera retornará, o shell definirá $?
para 148 por exemplo (128 + SIGTSTP) e a avaliação do restante será feita naquele point , então cmd2
é não executado. E cmd1
se torna um trabalho em segundo plano.
Você digitou:
cmd1 || cmd2
Ou:
cmd1; cmd2
cmd2
teria sido executado em Ctrl-Z e você teria que esperar que ele terminasse para obter o próximo prompt (em que você pode fg
ou bg
do seu trabalho em segundo plano).
Em zsh
, quando você pressiona Ctrl-Z em:
{cmd1 && cmd2 && cmd3}
Isso suspende todo o grupo (e o move para um subshell). No entanto, ao reiniciar, o comando suspenso, quando terminar, definirá $?
para 20, independentemente de seu status de saída, e não acho que haja uma maneira de contornar isso, então você acaba com o mesmo comportamento (embora em {cmd1 || cmd2}
O cmd2 seria executado após o término do cmd1, em vez de seguir diretamente para o Ctrl-Z ).