我一直在使用以下方法从终端启动程序:
program_name >/dev/null 2>&1 &但是最近我遇到了本网页,其中推荐了以下方法:
program_name </dev/null &>/dev/null &我知道第一个是什么意思了。它意味着将stderr指向stdout,stdout指向/dev/null,即stderr和stdout现在都指向null。
但第二个是什么意思呢?哪一个更适合从终端无头启动程序?
发布于 2019-01-28 14:49:49
默认情况下,运行程序时会打开三个“标准”文件:标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。在Unix中,这些与“文件描述符”相关联(stdin = 0,stdout = 1,stderr = 2)。默认情况下,这三者都与控制您的终端的设备(在屏幕上看到内容并在程序中输入输入的接口)相关联。
shell使您能够“重定向”文件描述符。>操作符重定向输出;<重定向输入。
例如:
program_name > /dev/null相当于:
program_name 1> /dev/null将输出重定向到文件描述符1(“stdout”)到‘/dev/null’
西米拉利
program_name 2> /dev/null将输出重定向到文件描述符2(“stderr”)到“/dev/null”
您可能希望将stdout和stderr重定向到单个文件,因此您可能认为应该这样做:
program_name > /dev/null 2> /dev/null但这并不能处理对文件描述符的交错写入(这背后的细节是一个不同的问题)。要解决这个问题,您可以这样做:
program_name > /dev/null 2>&1它表示“将写入文件描述符1重定向到/dev/null,并将写入文件描述符2重定向到与写入文件描述符1的位置相同的位置”。这将处理对文件描述符的交错写入。
这个选项非常常见,以至于有些shell包含一个短手,它的长度更短,功能也相当:
program_name &> /dev/null最后,您可以用重定向输出的方式重定向输入:
program_name < /dev/null将文件描述符0 (stdin)从/dev/null重定向,所以如果程序试图读取输入,就会得到EOF。
把这一切加在一起:
program_name </dev/null &>/dev/null &假设(1)运行program_name,(2)将标准输入从/dev/null (</dev/null)重定向,(3)将文件描述符1和2 (stdout和stderr)重定向到/dev/null (&>/dev/null),(4)在后台运行程序(&)。
发布于 2022-01-06 12:37:47
对于> /dev/null,您实际上是在对该事件进行空化。
对于2>&1,您要将任何错误流文本重定向到输出流。当有人试图运行一个在执行时实际抛出错误的命令时,这将是最好的理解。只需按原样使用该命令两次,另一次使用2>&1 post命令即可。
希望这至少对新手用户有帮助。谢谢。
https://unix.stackexchange.com/questions/497207
复制相似问题