2012-02-20 6 views
2

が、私は(簡体字以上)の引数でのpgrep呼び出そうとbashスクリプトを持って期待通りに動作しません引数がpgrepに渡されず、何らかの理由でエコーに渡されることを意味します。私は期待してい何bashスクリプト/のpgrepは

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

私は、それ自体でプリプレグラインを実行すると、予想通り、それは7632を出力します。

ここで何か問題がありますか?私はsh、ダッシュ、bashで試しました。同じ結果、私は本当に問題が表示されません。

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

参照:quoting variables

編集:とエコーのために私はどうなる:

echo pgrep -f \'$PATTERN\' 

答えて

3

私はlighttpd.bin avaiを持っていないのででテストするlable、私はほとんど@barti_dduに同意、テストされていないオプションを提出していますが、わずかに異なるひねりを加えた

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

私がPATTERNにassingment上の単一引用符を続けるだろうが、完全にあなたがDBLを必要と同意します-pgrepまたはechoで使用するときに引用する。

こちらがお役に立てば幸いです。

+0

+1二重引用符を使用し、パターン文字列の中から一重引用符を削除する場合は+1してください。しかし、おそらく第2の変更点を指摘しておくべきでしょう。 –

+0

@JonathanLeffler:注目してください。 –

+0

編集:申し訳ありませんが、stackoverflowは、改行を挿入する代わりに私のコメントを提出...あなたのソリューションは、ありがとうございます!なぜ私はプロンプトでコマンドを実行すると動作するのですか?私のスクリプトでは ""必要ですか? – alex

2

をあなたはPATTERN二重引用符でを囲む必要があり

+0

表示される 'pgrep'の使用法メッセージには、引数なしで' -f'が含まれています。 –