como executar o comando após o comando atual em execução no bash?

17

Estou baixando o arquivo com o wget, e quero desligar o computador depois que o download terminar, mas preciso ir a algum lugar agora :) É possível executar o comando no bash exacly quando o processo estiver concluído? / p>

Eu sei que isso funciona:

wget http://example.com/file.rar; shutdown now

Mas e se eu digitar apenas:

wget http://example.com/file.rar
    
por inothemo 03.09.2009 / 21:06

5 respostas

31

Você pode fazer algo assim:

  1. interrompe a execução do wget com ctrl-z (não está parado, está suspenso)
  2. coloque em segundo plano (bg)
  3. run: espera; desligamento -h agora

esperar vai esperar por todos os programas executados em background a partir do shell atual - ou seja, este wget.

Após o término da espera, o desligamento continuará.

    
por 03.09.2009 / 21:30
10

Em outro shell, use

ps -u <your username> | grep wget

para encontrar o PID do comando que você quer esperar, então

wait <PID>; shutdown -h now

para que o desligamento não seja executado até que o processo seja finalizado. Veja também a resposta de depesz .

    
por 03.09.2009 / 21:30
4

Minhas soluções são: suspenda sua tarefa de longa duração com Control + Z e digite algo como:

fg; echo "Done!"

Se você deseja executar reagir de maneira diferente com base no sucesso ou fracasso de seu comando, use & & e || como operadores de curto-circuito.

fg && echo "Success!" || echo "Failure!"

EDIT: Isto não funcionará com o sudo, porque ele irá pedir sua senha. Eu, consequentemente, removi os exemplos usando o sudo. Se você precisar de sudo para a segunda tarefa, use outro dos métodos postados aqui.

Por outro lado, acredito que tanto o GNOME quanto o KDE oferecem maneiras de acionar um desligamento / reinicialização sem usar o sudo, enviando um sinal D-Bus apropriado ou algo assim.

    
por 07.09.2009 / 06:16
1

Sim, basta digitar seu segundo comando e pressionar Enter. Se o seu programa atual estiver rolando texto, você não poderá ver o que está digitando corretamente, portanto, assista às suas chaves para fazer o que é certo.

Uma maneira mais inteligente é alternar para outro TTY (CTRL + ALT + F1 até F6) e executar o comando simultaneamente ou, se você estiver usando uma tela de programa de linha de comando, poderá criar uma nova janela.

    
por 03.09.2009 / 21:10
1

Se você quiser ser chique, verifique o status de retorno do wget e somente o desligamento se foi bem sucedido.

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi
    
por 03.09.2009 / 21:22

Tags