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 -STOPo 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 -KILLo 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.