DICA! Você pode verificar o código de saída do comando executado anterior:
if [ $? -eq 0 ]
then
exit 0
fi
Estou tentando escrever um script para fazer o seguinte:
Para colocá-lo em termos do Windows, eu gostaria de ter o equivalente em Linux de start cmd /c long_running_cmd
se long_running_cmd
for bem-sucedido e fazer o equivalente a start cmd /k long_running_cmd
se falhar.
O que eu tenho até agora é um script que inicia o xterm com um determinado comando e, em seguida, move a janela como desejado:
#!/bin/bash
# open a new terminal window in the background with the long running command
xterm -e ~/bin/launcher.sh ./long_running_cmd &
# move the terminal window (requires window process to be in background)
sleep 1
xdotool search --name launcher.sh windowmove 0 0
E ~ / bin / launcher.sh é destinado a executar o que for passado como argumento de linha de comando:
#!/bin/bash
# execute command line arguments
$@
Mas, não consegui fechar a janela do xterm depois que long_running_cmd
terminou.
Acho que algo como xterm -e ~/bin/launcher.sh "./long_running_cmd && kill $PPID" &
pode ser o que eu estou procurando, para que o xterm seja lançado em segundo plano e execute ./long_running_cmd && kill $PPID
. Portanto, o shell na janela xterm executa o comando de longa execução e, se ele for concluído com êxito, o processo pai do shell (ou seja, o processo que possui a janela xterm) será eliminado, fechando a janela xterm.
Mas, isso não funciona: nada acontece, então eu suspeito que minhas citações ou escapes estejam incorretas, e eu não consegui consertar isso.
Uma abordagem alternativa seria obter o PID de long_running_cmd
, usar wait
para aguardar a conclusão e, em seguida, eliminar a janela xterm usando kill $!
(pois $!
refere-se à última tarefa iniciada em segundo plano , que será a janela xterm). Mas eu não consigo descobrir uma boa maneira de obter o PID & valor de saída de long_running_cmd
fora do shell em execução na janela do xterm e no shell que iniciou a janela do xterm (antes de gravá-los em um arquivo em algum lugar, o que parece ser desnecessário?).
O que estou fazendo de errado ou há uma maneira mais fácil de realizar isso?
DICA! Você pode verificar o código de saída do comando executado anterior:
if [ $? -eq 0 ]
then
exit 0
fi