Se command4
estiver atualmente em execução, é possível fazer isso de forma bem direta:
^Z
$ fg && right_command5 && command6
Isto é essencialmente o que você já estava fazendo para começar command4
em primeiro lugar. wrong_command5
e o restante será substituído e nunca executado.
Eu acho que esse comportamento vai ser inesperado para você, então continue lendo para uma explicação de onde as coisas não funcionam da maneira que você achava que seriam.
No entanto: observe que sua sequência de comando original não faz o que você acha que faz . Quando você faz:
$ command1 && command2 && command3
Running command1 ...
Running command2 ...^Z
[1]+ Stopped
$ fg && command4
então command2
será retomado, mas o resto da cadeia não será . Parar command2
com Ctrl-Z significa que ele sai anormalmente com SIGTSTP
(-20). Como command2
sai sem sucesso, &&
produz curto-circuito e command3
nunca será executado. command4
será iniciado imediatamente após o final do command2
retomado.
Você pode assistir a esse comportamento em ação substituindo o &&
por ||
:
$ command2 || echo Running command3, exit was $?
^Z
[1]+ Stopped command2
Running command3, exit was 148
$
Você tem que listar toda a cadeia subseqüente de comandos quando você retomar, se você quiser o comportamento que você está procurando. Alternativamente, se você quiser parar e retomar cadeias de comando inteiras, você precisa executá-las em um subshell:
$ (command1 && command2 && command3)
^Z
$ fg
Nesse caso, porém, não há como interceder e substituir um comando.