Você pode separar vários comandos ;
, para que sejam executados sequencialmente, por exemplo:
really_long_script.sh ; echo Finished
Se você deseja executar o próximo programa apenas se o script terminar com o código de retorno 0 (o que geralmente significa que foi executado corretamente), então:
really_long_script.sh && echo OK
Se você quiser o contrário (ou seja, continue apenas se o comando atual falhar), então:
really_long_script.sh || echo FAILED
Você pode executar seu script em segundo plano (mas cuidado, a saída de scripts ( stdout
e stderr
) continuaria indo para o seu terminal, a menos que você o redirecionasse para algum lugar), e depois wait
para ele:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Se você já executou o script, poderá suspendê-lo Ctrl-Z
e executar algo como:
fg ; echo Finished
Onde fg
coloca o processo suspenso em primeiro plano ( bg
faria com que fosse executado em segundo plano, praticamente como no começo &
)
fg
retorna o valor do trabalho que ele continua, você pode usarfg && echo Finished
se desejar garantir que o comando seja bem-sucedido antes de executar o outro comando.Você também pode usar o controle de tarefas do bash. Se você começou
depois pressione ctrl + z para suspendê-lo:
para reiniciar o trabalho em segundo plano (como se o tivesse iniciado
really_long_script.sh &
). Em seguida, você pode esperar pelo trabalho em segundo plano comonde N é o ID do trabalho (provavelmente 1 se você não executou outros trabalhos em segundo plano), que também é exibido como
[1]
acima.fonte
Se o processo não for executado no tty atual, tente o seguinte:
fonte
watch
. Resposta super curta e aprende-se uma nova maneira útil de usar o relógioAcontece que isso não é tão difícil: você pode simplesmente digitar o próximo comando na janela enquanto o existente é executado, pressionar enter e, quando o primeiro terminar, o segundo comando será executado automaticamente.
Acho que existem maneiras mais elegantes, mas isso parece funcionar.
Edição para adicionar que, se você quiser executar um alerta após a conclusão do comando, poderá criar esses aliases em .bashrc e executar
alert
enquanto estiver em execução:fonte
Há um tempo atrás, escrevi um script para aguardar o final de outro processo.
NOISE_CMD
pode ser algo comonotify-send ...
, dado queDISPLAY
está definido corretamente.Sem qualquer argumento, basta fazer barulho imediatamente. Esse comportamento permite algo assim por conveniência (digamos que você chame o script abaixo
alarm.sh
):É claro que você pode fazer muitas coisas engraçadas com esse script, como deixar uma instância de
alarm.sh
espera por uma instância dealarm.sh
, que está aguardando algum outro comando. Ou executando um comando logo após a conclusão de alguma tarefa de outro usuário conectado ...>: DUma versão anterior do script acima pode ser interessante, se você quiser evitar uma dependência
pgrep
e aceitar os IDs do processo de pesquisa:Ligeiramente fora de tópico, mas útil em situações semelhantes:
reptyr
alguém pode estar interessado em uma ferramenta que "rouba" um processo de algum shell (pai) e o executa no shell atual. Tentei implementações semelhantes ereptyr
é a mais bonita e mais confiável para meus propósitos.fonte