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