abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)
1
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)&
[1] 3297
abhigenie92@ubuntu:~$ 1
[1]+ Done ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )
当将其作为后台进程启动时会发生什么,为什么我没有收到提示而必须按Enter
?在这两种情况下,它都会启动一个子 shell。
答案1
你得到提示返回(请参阅代码块的第五行) - 以及然后你得到了输出。当您Enter第三次输入时,您仍然处于“shell 提示符”状态。
理论上,可以对 shell 进行编程,以便在后台进程终止时重新发出提示。但
- 这真的没什么帮助。您的问题是,当后台作业完成
echo 1
并1
出现在您的终端上时,您的光标返回到屏幕的左边缘,并且您仍然“处于 shell 提示符”变得不明显。并且前台 shell 不知道后台任务何时写入屏幕。 从历史上看,shell 不知道你什么时候在打字一个命令;它只知道您何时输入Enter。 (在某些情况下,情况可能仍然如此。)因此 shell 不会知道您是否正在输入第三个命令
(sleep 3; echo someth
如果您在输入命令的过程中出现新的 shell 提示符,那将会非常令人困惑。