2017-03-01 60 views
1

我有這段代碼會產生一個錯誤,它可以抑制STDOUT,但它不會將STDERR存儲在變量ERROR中。將STDERR重定向到一個變量

ERROR = $(memtester 900 1 > /dev/null) 
+0

你不能左右'='在shell變量賦值空間。 – Barmar

+0

而且您不應使用大寫變量名稱,這些名稱僅用於應用程序環境變量。 – Barmar

+0

將stderr重定向到標準輸出由2>&1完成,&用於跟隨文件描述符。所以下面的代碼應該適合你。 ERROR = $({memtester 900>/dev/null;} 2>&1' – rowan

回答

2

你可以捕捉它是這樣的:

error=$(memtester 900 1 2>&1 >/dev/null) 

重定向操作符的順序是非常重要的在這裏。

  • 2>&1 - stderr重定向到stdout
  • >/dev/null - 標準輸出重定向到/dev/null
+0

爲什麼我們需要重定向到/ dev/null?是不是會丟失輸出? – djna

+3

@djna正常輸出的確會丟失,但顯然通過OP來指出,只捕獲命令錯誤(如果有的話)。沒有'>/dev/null'這個變量將包含輸出。 –

+0

@ user2489314:這是否適合你? – anubhava