2013-02-12 24 views
8

ich versuche, einen bestimmten Prozess zu finden, den Begriff „someWord“ und zwei andere Begriffe von $ 1 und $ 2pgrep -f mit mehreren Argumenten

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

dargestellt wird, enthält die

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

kehrt Was passiert, mein regelmäßiger Ausdruck? Das pgrep direkt in der Shell zu verwenden, funktioniert einwandfrei.

Antwort

8

Guter Herr, vielleicht diese

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

oder diese

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

Zunächst gibt es keinen Grund, Ihre pgrep Befehl in irgendetwas zu wickeln. Verwenden Sie einfach seinen Exit-Status:

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

Wenn pgrep erfolgreich ist, werden Sie 1 zurückkehren; Andernfalls geben Sie 0 zurück. Sie kehren jedoch nur die erwarteten Beendigungscodes zurück. Was Sie wahrscheinlich tun möchten, ist einfach die pgrep die letzte Aussage Ihrer Funktion zu sein; dann wird der Exit-Code pgrep der Exit-Code Ihrer Funktion sein.

something() { 
    ... 
    regex="someWord.*$1.*$2" 
    echo "$regex" 
    pgrep -f $regex 
} 
+0

, die wahr sein könnte, und ich werde es testen, ist aber nicht mein regex behindert, da es „someWord zeigt . * foo bar. * "aber sollte" someWord. * foo. * bar "sein? – tommsen

+0

Es sieht so aus, als ob "$ 1" auf "foo bar" eingestellt ist und "$ 2" gar nicht gesetzt ist. Können Sie der Frage mehr von 'test.sh' hinzufügen? – chepner

0

Wenn Sie wirklich etwas, wenn Ihr Befehl tun mögen, gibt einen Fehler zurück:

cmd="pgrep -f $regex" 

if ! $cmd; then 
    echo "cmd failed." 
else 
    echo "ok." 
fi 
Verwandte Themen