什么是

时间:2013-11-13 13:35:43

标签: bash

在bash中,标准(1)和错误(2)输出可以重新路由并丢弃:

>/dev/null 2>&1

但是下面的例子做了不同的事情:

nohup myscript.sh >myscript.log 2>&1 </dev/null &

上面示例中</dev/null的含义/功能是什么?在什么样的脚本方案中它会有用吗?

(Example Source)

4 个答案:

答案 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站)