2014-01-23 65 views
0

我想在我的shell腳本中運行一些命令,但想知道一些方法,它什麼都不返回。如何抑制命令的輸出?

例如:

#!/bin/bash] 
rm/home/user 

return: rm: can not lstat `/ home/user ': No such file or directory 

我將不得不把無形地運行不歸路的命令!

+5

什麼是所有這些空間中間的每一個斜線? – fedorqui

+0

你想做什麼?要刪除一個文件夾,使用'rm -rf/home/user',但刪除一個用戶文件夾可能是一個壞主意。要刪除文件,請執行'rm/home/use/file.txt'注意缺少空格。要在腳本中放入rm命令,shebang應該是'#!/ bin/bash',再次注意缺少空格。 –

+2

錯誤消息與您顯示的代碼不匹配。請不要重新鍵入,使用剪切和粘貼。 –

回答

1

您的直接錯誤來自路徑中不正確的間距,應該是rm /home/whatever路徑中沒有空格,假設您在dir名稱中沒有實際空格(在這種情況下,您將需要引用或正確轉義)

關於抑制輸出。在這裏重定向stdout有點奇怪。

$ touch test.txt 
$ rm test.txt > /dev/null 2>&1 

^ interactive rm is actually asking if you really want to delete the file here, but not printing the message 

如果你只是想沒有得到錯誤信息,只是重定向標準錯誤(文件描述符2)到/ dev/null的

$ rm test.txt 2> /dev/null 

$ rm test.txt 2>&- 

如果你想讓它不提示do you really want to delete型消息,使用強制標誌-f

$ rm -f test.txt 2> /dev/null 

$ rm -f test.txt 2>&- 

要刪除要麼需要rmdir如果它是空的,或者使用遞歸-r國旗的目錄,但是,這要擦去家居/home/user的,所以你真的需要這裏要小心。

除非你有它在--verbose模式下運行,我想不出任何需要關閉rm命令的標準輸出的情況。

另外,作爲慶典4,如果你想標準輸出和標準錯誤重定向到同一位置,只是使用​​或類似的東西

+0

問題解決了,非常感謝功能,並被解釋。 –

+0

@FilipiSilva沒問題,很高興我能幫到你。 – BroSlow

4

要抑制命令的標準輸出,傳統方法是將輸出發送到空設備,使用somecommand arg1 arg2 > /dev/null。爲了也抑制錯誤輸出,標準錯誤可以被重定向到相同的地方:somecommand arg1 arg1 > /dev/null 2>&1

+0

''/ dev/null 2>&1':'&&dev/null'('&>/dev/null'也適用)的較短替代方案。另外請注意,您可以持續使用'exec'重定向流,以便後續命令不需要明確的重定向 - 請參閱http://www.faqs.org/docs/abs/HTML/io-redirection.html上的「使用exec」部分。 – mklement0