在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用于立即向程序发送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而不等待任何输入.