使用 nohup 命令的标准输入输入

使用 nohup 命令的标准输入输入

http://www.gnu.org/software/coreutils/manual/html_node/nohup-inplication.html

nohup 运行给定的命令并忽略挂断信号,以便该命令可以在您注销后继续在后台运行。

概要:nohup command [arg]...

如果标准输入是终端,请将其重定向,以便终端会话不会错误地认为命令要使用该终端。

  1. 为什么我们需要这样做:

    使替代文件描述符不可读,以便错误地尝试从标准输入读取的命令可能会报告错误。

  2. 文件中的重定向标准输入不是由 完成的吗nohup command [arg]... 0<myfile?为什么0>/dev/null

    此重定向是 GNU 扩展;可以使用旨在移植到非 GNU 主机的程序nohup command [arg]... 0>/dev/null

答案1

想象一下您正在尝试使用 nohup 运行一个复杂的脚本。您可以通过将 stdin 重定向到无法读取的文件描述符来检测它是否尝试读取 stdin。看这两个例子:首先0</dev/null

rm nohup.out
nohup sh -c 'head -1' 0</dev/null
echo $?
cat nohup.out 

nohup.out 文件为空,脚本的返回码 ( $?) 为 0,即正常,因为脚本刚刚读取文件结尾。现在尝试使用0>/dev/nullie 0 打开相同的脚本仅输出:

rm nohup.out
nohup sh -c 'head -1' 0>/dev/null
echo $?
cat nohup.out 

这给出了 nohup.out 中的错误消息

head: error reading 'standard input': Bad file descriptor

退出代码为1,失败。这可能对您更有用。您还可以通过使用以下命令关闭 stdin 来获得相同的效果0<&-

rm nohup.out
nohup sh -c 'head -1' 0<&-
echo $?
cat nohup.out 

相关内容