在bash中,标准(1)和错误(2)输出可以重新路由并丢弃:
>/dev/null 2>&1
但是下面的例子做了不同的事情:
nohup myscript.sh >myscript.log 2>&1 </dev/null &
上面示例中</dev/null
的含义/功能是什么?在什么样的脚本方案中它会有用吗?
答案 0 :(得分:32)
将/dev/null
重定向到stdin会立即EOF
来自该进程的任何读取调用。这通常可用于将进程与tty分离(此类进程称为守护进程)。例如,当通过ssh远程启动后台进程时,您must redirect stdin会阻止进程等待本地输入。
重定向到/ dev / null的另一个原因是为了防止为stdin创建未使用的文件描述符。当您有许多长时间运行的进程时,这可以最小化总打开文件句柄。
答案 1 :(得分:25)
</dev/null
用于避免脚本等待输入。
引自the usage of < /dev/null & in the command line:
< /dev/null
用于立即向程序发送EOF,以便它 不等待输入(/dev/null
,空设备,是一个特殊的 丢弃写入其中的所有数据的文件,但报告写入 操作成功,并且不向任何读取进程提供数据 从它,立即产生EOF)。&
是一种特殊类型的命令 用于背景前一过程的分隔符。
所以命令:
nohup myscript.sh >myscript.log 2>&1 </dev/null &
# | ^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^
# | | | | run in background
# | | | |
# | | | don't expect input
# | | |
# | | redirect stderr to stdout
# | |
# | redirect stdout to myscript.log
# |
# keep running the command no matter the connection is lost or you logout
将移至命令后台,将stdout和stderr输出到myscript.log
,而不等待任何输入。
答案 2 :(得分:3)
</dev/null
为脚本提供空输入...
答案 3 :(得分:2)
这是一种关闭stdin
的方式,就像发送EOF
(^D
}一样。它可以在此示例中与mail
command一起使用,以表示该命令不再需要stdin
的输入。
它也常用于守护进程(the recommended approach for creating well-behaved daemons的第6站)