如何在后台运行 perl 脚本

如何在后台运行 perl 脚本

我是 ubuntu 的新用户...

最后加上 & 会将应用程序置于后台,但实际上并非如此,即使它在后台运行,它仍会在命令行中显示 perl 脚本的输出。因此它变得毫无用处,因为我必须等待整个脚本完成。

喜欢 :

output of perl..
..
..
Done.

所以我仍然需要等到 perl 脚本执行完毕,有没有什么方法可以让这类脚本在后台运行,这样我就不必等待了?

我已经尝试过以下操作:

command > test.txt //This generated emptyfile test.txt and all the output is still on command line instead of test.txt
command > /dev/null
command < /dev/null

他们都没有成功。

请不要建议通过按 CTRL+SHIFT+T 或 CTRL+ALT+T 来打开新的命令行控制台,因为我不想这样做,我想在执行某些工作时在后台运行 perl 脚本。

对于其他 perl 脚本,& 可以正常工作,但是对于这个脚本,却不行,有什么办法吗?

编辑:感谢 John1024 和 Volker Siegel 找到了解决方案。

命令 2> /dev/null &

答案1

命令可以在 stdout 或 stderr 上产生输出。您尝试的命令仅重定向 stdout。在 下bash,您可以使用以下方式同时重定向两个流的输出:

command &>test.txt &

或者

command &>/dev/null &

如果您使用的是 POSIX shell,则需要按步骤执行重定向:

command >test.txt 2>&1 &

>test.txt将 stdout 重定向到文件test.txt。由于 stderr 是文件句柄2, 的效果2>&1是将 stderr 重定向到 stdout&1当前所在的位置,用 表示。

答案2

看起来输出将进入错误流 stderr - 因此重定向它而不是 stdout:

command 2> errors.txt

或者将两者重定向到同一个文件:

command > errors.txt 2>&1

如果你想了解整个事情——“跳进兔子洞”——请参阅图解重定向教程

另请参阅nohup——如果您想在关闭终端后保持命令运行,它很有用:

nohup command

man nohup详情)

相关内容