Para já em execução : assumindo que o comando é um programa e, portanto, é executado como um processo filho no shell executando o script (ou parte do mesmo), e o script não deu um heredoc ou herestring para entrada ou ele leu ou pelo menos armazenou essa entrada, você pode parar após o processo termina por:
-
kill -STOP
o shell (para que ele não faça nada após o comando atual) - espere até que o processo filho termine e vá zumbi
-
kill -KILL
o shell
(Tudo como o mesmo usuário ou root
, de outro shell, é claro).
Se o corpo do do ... done
fizer duas ou mais coisas em cada iteração, isso só o captura após um programa que leva tempo suficiente em tempo real para obter o -STOP
, que pode ou pode não será o último programa na iteração.
Em alguns (muitos?) casos, ele irá trabalhar simplesmente para kill -KILL
o shell na frente, o que evita que o shell limpe seus filhos normalmente, e deixe o filho rodar e finalmente ser obtido por init
(ou equivalente no seu sistema). No entanto, isso pode resultar na criança vendo alguns erros de E / S ou diferenças de ambiente ou erros ou variações com quaisquer netos que tenha, e isso ainda pode acionar os resultados 'destrutivos' que você está tentando evitar.