“ </ dev / null”是什么意思?


16

我了解> /dev/null将事物重定向到/dev/null类似黑洞的行为。但是,我不明白这< /dev/null意味着什么。我看到了一些这样写的脚本:

nohup myprogram > foo.out 2> foo.err < /dev/null &

那么,< /dev/null上面的代码是什么意思呢?

这是一个建议的例子


Answers:


19

它确保所有I / O流都已被占用/占用。

这样,后台进程就不会对终端产生任何“束缚”,因此您可以在不尝试从TTY读取程序的情况下开展业务,这会导致终端挂起。

在这种情况下,由于您是通过Shell脚本通过ssh启动该进程,因此请确保该脚本可以不受阻碍地移动。


它是否假设myprogram接受了一些输入,但是在这种情况下,它没有将myprogram作为输入?
钱琛

谢谢。我理解其余的一切< /dev/null
陈谦

那么代码和没有代码的相同代码有什么区别< /dev/null
钱琛

我实际上是从这里阅读代码的: stackoverflow.com/questions/29142/...
陈倩

2
很高兴它有所帮助!对这种解决方法感到抱歉;上下文有所帮助,谢谢!-旁注:我将在一两分钟之内删除我的一堆评论,现在事情已经确定,对于其他看到它的人来说,这看起来很混乱
user3276552

12

program </dev/null表示program通过文件描述符0(即STDIN)从文件中获取其输入参数(可以是选项的输入参数,也可以是要操作的输入文件)/dev/null

如您所知,不/dev/null包含任何内容,它将在读取时通知EOF(文件末尾),因此从中获取输入的任何程序/dev/null基本上都不会重定向任何内容作为其输入参数。


那么,有什么区别< /dev/null吗?只需将其写为nohup myprogram > foo.out 2> foo.err &
Qian Chen

1
@ElgsQianChen取决于您的..STDIN program要什么?有些程序可能会强制规定,所以你需要把东西作为标准输入,这可能在这里的情况是,你只是用来/dev/null作为标准输入,让程序做了处理,把输出和错误中的文件中提到..
heemayl

那么,它是否有效地防止了任何输入阻塞流程,并且仅向任何输入请求提供了任何内容?
钱琛

1
@ElgsQianChen它将阻止文件描述符0,即STDIN,因此您不能通过它传递任何更多的输入..如果没有其他FD配置为从您那里获取输入,则将无法再给程序提供任何输入。
heemayl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.