有没有办法防止后台任务的输出覆盖 shell 中的命令行?

有没有办法防止后台任务的输出覆盖 shell 中的命令行?

我希望能够在 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
 $ 

当然,输出(如果有)将通过电子邮件发送给您。

相关内容