Abra uma janela de terminal e execute o comando, em seguida feche a janela do terminal se o comando foi concluído com sucesso?

0

Estou tentando escrever um script para fazer o seguinte:

  1. Abra uma janela de terminal que executa um comando de longa execução
  2. (Idealmente) mova a janela do terminal para o canto superior esquerdo da tela usando xdotool
  3. Feche a janela do terminal apenas se o comando de execução longa tiver sido encerrado com um código de retorno zero

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?

    
por Caspar 07.11.2012 / 18:02

1 resposta

1

DICA! Você pode verificar o código de saída do comando executado anterior:

if [ $? -eq 0 ]
then
  exit 0
fi
    
por 27.12.2012 / 12:33