我有一段代码,它产生了一个错误,虽然它可以抑制标准输出(STDOUT),但它不能将标准错误(STDERR)存储在变量ERROR中。
ERROR = $(memtester 900 1 > /dev/null)
error=$(memtester 900 1 2>&1 >/dev/null)
此处重定向运算符的顺序非常重要。
2>&1
- 将标准错误输出重定向到标准输出>/dev/null
- 将标准输出重定向到/dev/null
>/dev/null
,这个变量也会包含输出内容。 - George Vasiliou2>&1
并不意味着跟随&1(标准输出)。它的意思是将文件描述符2(标准错误)发送到文件描述符1当前所在的位置 = 命令(管道)缓冲区或者如果直接从CLI运行,则为/dev/tty。如果您稍后将文件描述符1重定向到其他位置(例如文件或像这个答案中的/dev/null),文件描述符2仍然去到与文件描述符1之前绑定的设备(命令管道或命令行中的/dev/tty)。在这里得到了很好的解释:http://mywiki.wooledge.org/BashFAQ/002 - George Vasiliou
ERROR=$({ memtester 900 > /dev/null; } 2>&1
- rowan