2011-08-11 127 views
2

這基本上是我在bash中的第一個腳本,所以我可能會錯過一些非常簡單的東西。Bash - 爲什麼這種情況不會做我認爲應該做的事情?

我不明白爲什麼"$(pgrep firefox)"似乎返回的東西,即使firefox沒有運行。

腳本應該始終保持firefox實例在運行。

#!/bin/bash 
while true; 
do 
     if [ -z "$(pgrep firefox)" ] 
       then 
         echo "firefox not running. Starting now..." 
         firefox 
     fi 
done 

真正奇怪的是,如果我在bash命令鍵入此提示它按預期工作

if [ -z "$(pgrep firefox)" ]; then echo "not running"; fi 
+0

你意識到你的命令提示符下測試有(V「未運行」「運行」)逆轉邏輯?也不需要「;」事後(不要以爲它會受傷)。 –

+0

我的意思是'沒有運行'。更新,謝謝! – Bogdan

+0

這是一個非常繁忙的腳本。你可能想在while循環中睡幾秒鐘。 –

回答

3

,你是否嘗試打印出的$(pgrep firefox)結果看到的是正在返回什麼?

順便說一句,你不需要在這裏比較字符串。 pgrep返回如果一個過程中發現真,否則爲假,所以你可以這樣做:

if ! pgrep firefox 
then 
    echo firefox not running 
fi 
+0

運行'echo $(pgrep firefox)'會顯示pid,如果ff正在運行或者沒有顯示 – Bogdan

+0

好的。我把你的例子放在一個空白的新腳本中進行測試。如果firefox沒有運行,我得到實際腳本的pid。如果FF運行,我會得到2個PID,一個用於ff,一個用於腳本。如果我從命令提示符運行,它按預期工作。沒有道理! – Bogdan

+0

啊,它呢!你看到腳本的pid –

相關問題