2012-02-20 63 views
2

我有嘗試調用p纖ep與參數(在簡化的)一個bash腳本:bash腳本/ p纖ep工作不正常

PATTERN="'/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'" 
pgrep -f $PATTERN 
echo pgrep -f $PATTERN 

提供了以下的輸出:

Usage: pgrep [-cflvx] [-d DELIM] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST] 
     [-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN] 
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$' 

我想這意味着該參數不傳遞給pgrep,但由於某種原因傳遞給回顯。

我很期待:

7632 
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$' 

當我本身運行預浸料線,它輸出7632預期。

我在這裏做錯了什麼?我用sh,dash和bash嘗試過。相同的結果,我真的沒有看到問題。

回答

3

你需要圍繞PATTERN在雙引號:

PATTERN="/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$" 
pgrep -f "$PATTERN" 

參見:quoting variables

編輯:和呼應我只想做:

echo pgrep -f \'$PATTERN\' 
+0

+1用於雙引號並從模式字符串中刪除單引號。不過,你也應該指出第二個改變。 – 2012-02-20 17:13:00

+0

@JonathanLeffler:感謝您的關注。 – 2012-02-20 17:46:56

+0

編輯:對不起,stackoverflow提交我的意見,而不是插入一個換行符...您的解決方案的作品,謝謝!你能向我解釋爲什麼當我在提示符下運行命令時工作原理,但在我的腳本中它需要「」?謝謝 – alex 2012-02-20 18:05:07

2

因爲我沒有lighttpd.bin avai拉布勒用,我提交的未經檢驗的選擇,大多與@barti_ddu同意測試,但略有不同的扭曲

PATTERN='/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$' 
pgrep -f "$PATTERN" 
echo pgrep -f "$PATTERN" 

我會保持單引號的assingment到模式,但完全同意你所需要的DBL使用pgrep或echo時引用。

我希望這會有所幫助。

+0

顯示'pgrep'的用法消息包含'-f',沒有任何參數。 – 2012-02-20 17:11:52