什么是bash中的</ dev/null?

nma*_*max 26 bash

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

>/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

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

nohup myscript.sh >myscript.log 2>&1 </dev/null &
Run Code Online (Sandbox Code Playgroud)

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

(示例来源)

cmh*_*cmh 37

重定向/dev/null到stdin将立即给出EOF来自该进程的任何读取调用.这通常可用于将进程与tty分离(此类进程称为守护进程).例如,在通过ssh远程启动后台进程时,必须重定向stdin以防止进程等待本地输入.

重定向到/ dev/null的另一个原因是为了防止为stdin创建未使用的文件描述符.当您有许多长时间运行的进程时,这可以最小化总打开文件句柄.


fed*_*qui 30

</dev/null 用于避免脚本等待输入.

引用</ dev/null&在命令行中的用法:

< /dev/null用于立即向程序发送EOF,以便它不等待输入(/dev/nullnull设备,是一个丢弃写入其中的所有数据的特殊文件,但报告写操作成功,并且不提供数据到任何从中读取的过程,立即产生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
Run Code Online (Sandbox Code Playgroud)

将移动到后台命令,输出stdout和stderr myscript.log而不等待任何输入.


rkh*_*rkh 5

</dev/null为脚本提供空输入...