如何在bash中抑制stdout和stderr

时间:2017-09-02 00:02:25

标签: bash

当我意识到输出重定向&>在脚本内部不起作用时,我试图创建一个小脚本。如果我写在终端

dpkg -s firefox &> /dev/null

dpkg -s firefox 2>&1 /dev/null

我没有输出,但如果我将其插入脚本中,它将显示输出。奇怪的是,如果我在里面写脚本

dpkg -s firefox 1> /dev/null

dpkg -s firefox 2> /dev/null

该命令的输出被抑制。如何抑制stderrstdout

2 个答案:

答案 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