14

「someWord」という用語と、$1 と $2 で表される他の 2 つの用語を含む特定のプロセスを見つけようとしています。

 7   regex="someWord.*$1.*$2"
 8   echo "$regex"
 9   [ `pgrep -f $regex` ] && return 1 || return 0

返す

./test.sh foo bar
someWord.*foo bar.*
./test.sh: line 9: [: too many arguments

正規表現はどうなりますか? そのpgrepをシェルで直接実行するとうまくいきます。

4

3 に答える 3

8

良いサー、おそらくこれ

[[ `pgrep -f "$regex"` ]] && return 1 || return 0

またはこれ

[ "`pgrep -f '$regex'`" ] && return 1 || return 0
于 2013-02-12T16:47:57.747 に答える
1

pgrepまず、コマンドをラップする理由はありません。終了ステータスを使用するだけです:

pgrep -f "$regex" && return 1 || return 0.

成功した場合pgrepは 1 を返します。それ以外の場合は 0 を返します。ただし、実行しているのは、予想される終了コードを逆にすることだけです。おそらくやりたいことはpgrep、関数の最後のステートメントにすることです。のpgrep終了コードは、関数の終了コードになります。

something () {
   ...
   regex="someWord.*$1.*$2"
   echo "$regex"
   pgrep -f $regex
}
于 2013-02-12T16:54:41.207 に答える
0

コマンドがエラーを返した場合に本当に何かをしたい場合:

cmd="pgrep -f $regex"

if ! $cmd; then
  echo "cmd failed."
else
  echo "ok."
fi
于 2013-02-12T16:57:58.473 に答える