2009-03-05 49 views

回答

366

下面將標準輸出發送到空設備(位桶)。

,如果你也想的錯誤消息被派往那裏,使用的(首先可能並不適用於所有殼工作)之一:

scriptname &>/dev/null 
scriptname >/dev/null 2>&1 
scriptname >/dev/null 2>/dev/null 

,如果你要錄製的消息,但是看不到他們,用實際文件替換/dev/null,如:

scriptname &>scriptname.out 

爲完整的Windows的cmd.exe(其中 「NUL」 是 「的/ dev/null的」 等效)下,它是:

scriptname >nul 2>nul 
+8

注'&>'是bash(也許是C shell)特有的; Korn和Bourne shell需要2>/dev/null或2>&1(將stderr發送到與stdout相同的地方)。 Korn shell似乎將'&>'解釋爲「運行到&後臺,然後在空命令上執行I/O重定向」。 – 2009-03-06 00:16:03

+2

請注意,有些命令直接寫入終端設備,而不是標準輸出/錯誤。爲了測試,將`echo foo> $(tty)`放在腳本中並運行`./test.sh&>/dev/null` - 輸出仍然會打印到終端。當然,如果你正在編寫一個不使用這種命令的腳本,這並不是問題。 – l0b0 2013-02-13 12:19:07

+1

太棒了! > nul 2> nul適用於Windows下的cygwin! – yang 2014-01-12 08:05:57

30

喜歡的東西

script > /dev/null 2>&1 

這將阻止標準輸出錯誤輸出,他們兩個重定向到/dev/null

4

像andynormancx後使用:(如果你在Unix環境下工作)

scriptname > /dev/null 

,或者您可以使用此:(如果你在Windows環境中工作)

scriptname > nul 
7

嘗試

: $(yourcommand) 

:是短期的 「什麼都不做」。

$()只是你的命令。

4

,可能適合在某些情況下的替代方法是一個命令的結果分配給一個變量:

$ DUMMY=`grep root /etc/passwd` 
$ echo $? 
0 
$ DUMMY=`grep r00t /etc/passwd` 
$ echo $? 
1 

由於擊等POSIX命令行解釋器不考慮變量賦值作爲一個命令,本命令的返回碼受到尊重。

1

使用Bash腳本,我怎樣才能抑制命令的所有輸出?


恕我直言,我相信你可以使用這個重定向實現簡單,因爲在第一個答案觀察,沒有別的:

/path/to/command &>/dev/null 


The Linux Documentation Project這個例子是值得一提的還有:

3.6示例:stderr和stdout 2文件

這會將程序的每個輸出都放到一個文件中。如果你想要一個命令通過絕對的沉默,這有時適用於cron條目。

 rm -f $(find/-name core) &> /dev/null 
1

在你的腳本,你可以添加以下到您所知道的去給一個輸出線:

some_code 2>>/dev/null 

要不然你也可以嘗試

some_code >>/dev/null 
相關問題