2012-02-08 86 views
67

我寫了兩個shell腳本a.sh和b.sh.在a.sh和b.sh中,我有一個無限循環,並且它們向終端輸出一些輸出。我想寫另一個調用a.sh和b.sh的腳本,但我希望用戶立即重新獲得對終端的控制權,而不是讓腳本無限運行,並且我想隱藏終端中的輸出。如何在後臺運行shell腳本並得不到輸出

回答

139

使用nohup如果你的後臺工作需要很長時間才能完成,或者你只是使用SecureCRT或類似的東西登錄服務器。

重定向標準輸出stderr的/dev/null忽略輸出。

nohup /path/to/your/script.sh > /dev/null 2>&1 & 
+0

只是爲了添加,有時會有腳本的參數,那麼上面的命令將返回**不明確的輸出重定向**。 – sabertooth1990 2013-11-06 15:00:19

+0

我發現的一個更好的方法是使用 'nohup /path/to/your/script.sh parameter1>&1&' 如果有人知道更好的方法。 – sabertooth1990 2013-11-06 15:06:46

+2

如果您使用'nohup',則不需要'/ dev/null 2>&1',因爲它已經將所有STDOUT和STDERR流自動附加到nohup.out文件。 使用只是:'nohup/path/to/your/command&' – leonarth 2015-11-13 16:28:59

11

如果它們在同一個目錄中的腳本,包含:

./a.sh > /dev/null 2>&1 & 
./b.sh > /dev/null 2>&1 & 

&末是什麼使你的腳本在後臺運行。

> /dev/null 2>&1部分不是必需的 - 它重定向stdout和stderr流,因此您不必在終端上看到它們,您可能想要爲具有大量輸出的嘈雜腳本執行此操作。

+0

感謝每一個機構。所有的答案真的很有用,謝謝。 – 2012-02-08 10:22:17

23

輸出重定向到一個文件是這樣的:

./a.sh > somefile 2>&1 & 

這都將輸出和錯誤重定向到同一個文件。如果你想輸出和錯誤重定向到兩個不同的文件使用:

./a.sh > stdoutfile 2> stderrfile & 

您可以使用/dev/null爲一個或兩個文件,如果你不關心stdout和/或標準錯誤。有關重定向的詳細信息,請參閱bash manpage

13

對不起,這是一個有點晚,但發現somple命令理想的解決方案,你不希望任何標準或錯誤輸出(信貸,這是由於:http://felixmilea.com/2014/12/running-bash-commands-background-properly/

這重定向輸出爲null,保持屏幕清晰:

command &>/dev/null & 
+0

注意:命令將終止時,終端關閉了。 – Banana 2017-02-12 19:30:29

+0

對於任何在將來想要解決方案以在會話結束後保持命令運行的人,我都會建議使用screen或tmux。他們必須在關閉初始會話後進行「會話中的會話」。如果您重新登錄,則可以重新連接到正在進行的會話。 非常適合運行rsync備份,例如同步需要長時間運行並且不想讓會話保持運行狀態。 – DanteAlighieri 2017-03-16 13:13:41

相關問題