当我意识到输出重定向&>
在脚本内部不起作用时,我试图创建一个小脚本。如果我写在终端
dpkg -s firefox &> /dev/null
或
dpkg -s firefox 2>&1 /dev/null
我没有输出,但如果我将其插入脚本中,它将显示输出。奇怪的是,如果我在里面写脚本
dpkg -s firefox 1> /dev/null
或
dpkg -s firefox 2> /dev/null
该命令的输出被抑制。如何抑制stderr
和stdout
?
答案 0 :(得分:4)
Make file descriptor 2 (stderr) write to where File descriptor 1 (stdout) is writing
dpkg -s firefox >/dev/null 2>&1
This will suppress both sources.
答案 1 :(得分:4)
&>
是一个bash扩展名:&>filename
相当于POSIX标准>filename 2>&1
。
确保脚本以#!/bin/bash
开头,因此它可以使用bash
扩展名。 #!/bin/sh
运行不同的shell(或者它可能是指向bash
的链接,但当它看到它以此名称运行时,它会切换到更符合POSIX的模式)。
你几乎用2>&1 >/dev/null
做对了,但顺序很重要。重定向从左到右执行,因此您的版本会将旧版stdout
复制到stderr
,然后将stdout
重定向到/dev/null
。