我希望能够在 shell 的后台运行任务,并且不会让它们到 stdout 或 stderr 的输出覆盖底部的命令行。我经常需要运行其他命令来与后台进程交互,并且希望从同一个 shell 执行这些操作,而不必打开另一个终端或使用多路复用器来分割终端(如屏幕)。
理想情况下,可能有一些我不知道的设置(我通常使用 bash 或 ksh),但我可以使用新的或不同的 shell 或脚本。
我愿意接受任何建议并感谢任何帮助,谢谢。
编辑:感谢您的所有回答,但我的问题有点不清楚。我仍然需要观察后台任务的输出,我只是希望它不要覆盖我在命令行上可能输入的任何新命令。理想情况下,后台程序的输出将显示在 shell 的除底行之外的所有行中,这样我就可以自由地在该行中构造新命令。
这类似于运行水平分割的屏幕,其中底部窗口只有 1-2 行高,但对于我的目的而言,使用屏幕有以下缺点:
- 我不需要/不希望这些进程在我退出后继续存在
- 需要一两个额外的命令来设置(即使拆分和窗口大小调整是在 .screenrc 文件上完成的)
- 我希望能够使用 shell 的作业控制命令,而无需在屏幕窗口之间切换(即 jobs、bg、fg、kill %1,至少在 bash 的情况下)
再次感谢您的帮助,这是我的第一个问题,答案的速度和数量让我震惊!
答案1
1>/dev/null
在 Bash 和 ksh 中,您可以通过在命令后附加命令来使所有 stdout 消失。
对于 csh 和 tcsh,则$1>/dev/null
答案2
mycommand > /dev/null 2>&1
这会将 stderror (2)重定向到 stdout (1)到 /dev/null
答案3
从“nohup”维基百科页面扩展已经给出的答案......
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
http://en.wikipedia.org/wiki/Nohup
如果您需要终止 shell,nohup 可让进程继续运行。'>' 和 '<' 将输出重定向到“文件”,无论该文件是什么。在给出的一些示例中,该文件只是 /dev/null。'&' 告诉 shell 将进程置于后台并继续接受输入,因为 OP 可能已经知道了。
答案4
根据系统管理员对安全的严格程度,您可以使用“at”运行该命令。
$ at now
date
id
^D
$
当然,输出(如果有)将通过电子邮件发送给您。