2014-10-01 58 views
1

以下是我的腳本,每次運行時都會進入其他部分。當我運行TEST2EVAL命令它給了我1unix腳本有什麼問題

#!/bin/sh 
TEST2EVAL='ps auxf | grep some.jar | grep -v grep | wc -l' 
if [ "$TEST2EVAL" = 1 ] 
then 
java -jar /path/to/jar & 
else 
echo "Running" 
fi 

回答

1

在爲了節省命令的輸出在一個變量,你必須在其反引號命令(`),而不是單引號(')。因此,你的腳本的第二行更改爲:

TEST2EVAL=`ps auxf | grep some.jar | grep -v grep | wc -l` 
+0

得到它。謝謝 – sssV 2014-10-01 17:41:42

1

您正在使用命令替換錯誤的語錄:沒有單引號:

TEST2EVAL='ps auxf | grep some.jar | grep -v grep | wc -l' 

但反引號:

TEST2EVAL=`ps auxf | grep some.jar | grep -v grep | wc -l` 

更好但是,請改用TEST2EVAL=$(ps auxf | grep some.jar | grep -v grep | wc -l)。它更清晰,支持所有與POSIX兼容的shell,並且可以在需要時更容易地嵌套。

+0

完美。謝謝 – sssV 2014-10-01 17:43:57

3

假設你正在試圖找出是否有任何過程與some.jar對他們的命令行運行,你可能想:

if pgrep -f some.jar; then 
    echo running; 
else 
    echo not running; 
fi 
+0

是的,試圖找到一個進程,如果它沒有運行,想要啓動它!它的工作現在! – sssV 2014-10-01 17:46:19

+0

@sssV應該指出的是,這不是測試使用該jar的'java'進程。任何接觸該jar的東西(或其他具有相同名稱的文件)都會跳過該「正在運行」的檢測。 – 2014-10-01 17:47:12

+0

是的,將使用唯一的名稱,並將使用此腳本cronjob – sssV 2014-10-01 17:49:32