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
从任何终端访问该文件并保留命令的输出。