如何使用 nohup 同时仍将 stderr 发送到终端

如何使用 nohup 同时仍将 stderr 发送到终端

nohup 自动将 stderr 重定向到 stdout,但我想将其发送到终端(它显示进度)。我怎样才能做到这一点?

答案1

只需重定向它即可。以这个脚本为例,它向 stderr 打印一行,向 stdout 打印一行:

#!/bin/sh
echo stderr >&2
echo stdout

如果我现在运行它并将nohup标准错误重定向到文件,它将按预期工作:

$ nohup a.sh 2>er
$ cat er
nohup: ignoring input and appending output to ‘nohup.out’
stderr

请注意,它还包括自身的 stderr,nohup因为您正在重定向nohup.您可以对标准输出执行相同的操作:

nohup a.sh > foo

基本上,仅在不重定向输出时nohup使用。nohup.out


要将 stderr 打印到终端,您可以使用进程重定向通过 stderr 传递tee

$ nohup a.sh 2> >(tee)
nohup: ignoring input and appending output to ‘nohup.out’
stderr

答案2

正如nohup手册所述:

NAME
   nohup - run a command immune to hangups, with output to a non-tty

它用于运行没有与其关联的 tty 的命令,您可以结束会话并且该命令将继续运行,因此它的输出不会附加到 tty,因此无法在那里显示输出。nohup创建一个名为 nohup.out 的文件,但您可以tail -f从任何终端访问该文件并保留命令的输出。

相关内容