Ctrl+Z 和 fg 附加命令

Ctrl+Z 和 fg 附加命令

我想知道当想要在正在运行的命令完成后附加要执行的命令时,bash 中的 Ctrl+Z 和 fg 的行为是什么。例如,在下面的命令序列中,我希望控制台显示“1”,然后显示“2”,然后显示“3”,然后显示“4”,但在 sleep 30 完成后,我只得到最后一个命令 echo 4:

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

有任何想法吗?

答案1

Control-Z 暂停作业(不是您的 shell 命令行),因此所有其他命令将运行而无需等待它。似乎当您停止作业时,shell 会尝试运行下一个作业,但正如您使用的那样,&&并且前一个命令没有完成 OK(根本没有完成但暂停了),带有 && 的命令将被丢弃。另一方面,如果您在命令行中使用;第二&&个命令,那么您会看到第二个命令在第一个命令暂停时执行:

$ 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
$ 

答案2

这不是fg你想要的;可能是wait。例如

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

更多信息:

$ help wait

相关内容