Ctrl + Z e fg para acrescentar comandos

0

Gostaria de saber qual é o comportamento de Ctrl + Z e fg no bash quando se quer acrescentar comandos a serem executados após a conclusão de um comando em execução. Por exemplo, na seqüência de comandos abaixo, eu esperaria que o console exibisse "1", depois "2", depois "3", depois "4", mas só recebo o último comando, echo 4, depois de dormir 30 termina:

avilella@magneto:~$ sleep 30 && echo 1 
^Z
[1]+  Stopped                 sleep 30
avilella@magneto:~$ fg && sleep 5 && echo 2
sleep 30
^Z
[1]+  Stopped                 sleep 30
avilella@magneto:~$ fg && sleep 5 && echo 3
sleep 30
^Z
[1]+  Stopped                 sleep 30
avilella@magneto:~$ fg && sleep 5 && echo 4
sleep 30
4

Alguma idéia?

    
por 719016 27.11.2011 / 01:10

2 respostas

1

Control-Z suspende um trabalho (não a linha de comando do seu shell), então todos os outros comandos serão executados sem esperá-lo. Parece que quando você para um trabalho, o shell tenta executar o próximo, mas como você usou && e o comando anterior não foi concluído OK (não foi concluído, mas pausado), o comando com & & é descartado. Por outro lado, se você usar ; em vez de && para um segundo comando na linha de comando, verá que o segundo comando é executado quando o primeiro é pausado:

$ perl -e '$|=1;for (1..5){ sleep 1;print}print qq{END\n} ';echo test_z00000000000000
12^Z
[1]+  Stopped                 perl -e '$|=1;for (1..5){ sleep 1;print} '
test_z00000000000000
$ fg
perl -e '$|=1;for (1..5){ sleep 1;print} '
345END
$ 
    
por 27.11.2011 / 02:24
1

Não é fg que você quer; pode ser wait . Por exemplo,

$ cp large.file some/where
^Z
[1]+ 22224 suspended  cp
$ wait && beep  # beep when first command completes

Para mais informações:

$ help wait
    
por 14.03.2015 / 17:00

Tags