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 ).