2013-11-28 94 views
1

試圖用google搜索這個,但命令被稱爲'which',這有點棘手!`which`忽略重定向的輸出

我的問題是這樣的:我試圖重定向的'哪個'命令的輸出,以便它沉默,但它似乎忽略我的重定向。示例:

#> which foo 2>&1 >/dev/null 
/usr/bin/which: no foo in <my PATH> 

任何想法?

編輯:在我的情況,我想成功和失敗的消息被抑制,我的腳本簡單地使用退出代碼(和失敗消息是混亂的)。

+0

注意:不要依賴於它的退出狀態!它*不一定會告訴你命令是否存在! ''這種方式不便攜。特別是,你可能會想要這些替換:'case \'uname -s \'in SunOS)which(){ksh whence -p「$ @」; } ;; HP-UX)which(){command -v「$ @」; } ;; esac' –

+0

謝謝!在這種情況下,該命令是隻能在Linux上運行的安裝腳本的一部分,但是我將在未來考慮到這一點! – shearn89

回答

7

你需要把2>&1算賬:

which foo >/dev/null 2>&1 

或擊4,更新,簡單地說:

which foo &>/dev/null 
+0

我猜這是因爲bash從右到左讀取管道/重定向? – shearn89

+1

@shearn不,從左到右! –

2

有之間的差異:

$ command 2>&1 > file 

$ command > file 2>&1 

你想要的是第二個,即

$ which foo >/dev/null 2>&1