2013-02-18 83 views
0

if pgrep apache; then echo "oliver"; fi
如果命令pgrep apache不爲空,則會回顯oliver。我想做相反的事。如果命令pgrep apache返回空字符串,請運行命令。如果shell命令爲空

+0

回聲不會發生,因爲'pgrep apache'不是空的。而是因爲'pgrep'成功返回而被執行。在這種情況下,成功的命令和產生某些輸出的命令是等同的,但這是混淆的常見原因。 – 2013-02-19 00:15:34

回答

4
if ! pgrep apache; then echo "oliver"; fi 
+0

這正是我在找的東西。感謝DigitalRoss。 – onassar 2013-02-19 00:13:41

1

試着這樣做:

pgrep &>/dev/null apache || echo "foobar" 

或:

if ! pgrep &>/dev/null apache; then echo "foobar"; fi 

!代表

這不是基於命令的輸出,但如果命令whas truefalse

,當命令的返回碼是0,它被認爲是true,如果大於0,這是false。您可以檢查此返回碼與變量$?,例如:

ls /path/to/inexistant/file 
echo $? 

true & false commands

+0

但我的名字是'oliver'! – onassar 2013-02-18 19:16:41

+1

請勿*使用'&>'。語法是不明確的:''bash'會把它看成和'>/dev/null 2>&1'一樣,而'dash'會把它當作'&>'(它會在後臺運行進程,然後截斷'/ dev/null') – 2013-02-19 00:13:16

1

我不確定的背景下,但假設你想做些什麼特定的進程是或不是找到。

bash-3.2$ pgrep -q bash && echo "bash was found" 
bash was found 

bash-3.2$ pgrep -q XXXbash || echo "XXXbash was NOT was found" 
XXXbash was NOT was found