我似乎正在“失去”这个提示。怎么了?

我似乎正在“失去”这个提示。怎么了?

我通过 ssh 连接到 ubuntu 12.04 云服务器并启动一个 Web 服务器,如下所示(使用 bash):

$ nohup python tserver.py &
[2] 2122
$ nohup: ignoring input and appending output to `nohup.out'

运行该命令后,提示消失。只有一个空行。我可以通过按“回车”来恢复提示——即在我按回车后,我再次看到 $。但我想编写其中一些命令的脚本(打开几个不同的 Web 服务器实例)。所以我不想编写类似“发送输入命令”之类的脚本。这里发生了什么?为什么我会丢失提示?如何编写一系列此类命令的脚本?

答案1

您正在将应用程序置于后台,并且应用程序正在生成输出。您的提示仍然存在,只是显示了额外的内容。

例如:

$ ( sleep 1 && echo hello ) &
[1] 24764
$ █

然后延迟 1 秒后,我得到:

$ ( sleep 1 && echo hello ) &
[1] 24764
$ hello

只是将echo输出写入您的终端,并出现在光标当前所在的位置。 shell 不知道已显示输出。您可以继续输入,就好像该输出不存在一样(它只是变得难以阅读)。

然而,一个干净的解决方案是重定向输出:

nohup python tserver.py >/dev/null 2>&1 &

答案2

尽管您确实通过声明在后台启动了程序&,但后台进程的输出仍然定向到当前终端的标准输出。

这意味着您的提示被类似echo '\r\n'(覆盖当前行,以防下一个提示完全消失)或echo "Someotherstuff"Someotherstuff在提示前面打印,然后转到终端的下一行)之类的内容覆盖。

如果按ENTER,您将只输入一个换行符,这会使您的提示再次打印。

相关内容