将STDERR重定向到变量

Aar*_*ron 3 linux bash shell stdout stderr

我有此代码会产生错误,并且可以抑制STDOUT,但不会将STDERR存储在变量ERROR中。

ERROR = $(memtester 900 1 > /dev/null)
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您可以这样捕获它:

error=$(memtester 900 1 2>&1 >/dev/null)
Run Code Online (Sandbox Code Playgroud)

重定向运算符的顺序在这里很重要。

  • 2>&1 -将stderr重定向到stdout
  • >/dev/null -将标准输出重定向到 /dev/null

  • @djna的确会丢失正常的输出,但是显然OP的作用是仅捕获命令错误(如果有)。没有`> / dev / null`,这个变量也将包含输出。 (3认同)
  • @djna-不,这不是重定向的工作方式。命令'2>&1'并不意味着跟随&1(stdout)。如果直接从CLI运行,则意味着将fd 2(stderr)发送到fd1当前到达的位置=命令(管道)缓冲区或/ dev / tty。如果以后将fd1重定向到其他地方(文件或类似对dev / null的答复),则fd2仍将转到fd1之前绑定的设备(命令管道或命令行中的/ dev / tty)。在这里很好地解释了:http://mywiki.wooledge.org/BashFAQ/002 (2认同)
  • @George Vasilou阿哈!谢谢乔治。(曾经有一段时间我知道这些东西;-) (2认同)