我是 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
详情)