2013-02-12 3 views
8

я пытаюсь найти конкретный процесс, содержащий термин «someWord» и два других термины, представленный $ 1 и $ 2pgrep -f с несколькими аргументами

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 непосредственно в оболочке отлично работает.

ответ

8

Хорошо, сэр, возможно, это

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

или это

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

Во-первых, нет никаких причин, чтобы обернуть вашу команду pgrep в чем-либо. Просто используйте свой статус выхода:

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

Если pgrep успешно, вы будете возвращаться 1; в противном случае вы вернете 0. Однако все, что вы делаете, - это изменение ожидаемых кодов выхода. То, что вы, вероятно, хотите сделать, это просто дать pgrep последним утверждением вашей функции; то код выхода pgrep будет кодом выхода вашей функции.

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

, что может быть правдой, и я буду тестировать его, но это не мое регулярное выражение мешает, как это показывает «someWord . * foo bar. * "но должен быть" someWord. * foo. * bar "? – tommsen

+0

Похоже, что '$ 1' установлен в« foo bar », а' $ 2' вообще не установлен. Можете ли вы добавить еще вопрос 'test.sh' к вопросу? – chepner

0

Если вы действительно хотите сделать что-то в случае, если ваша команда возвращает ошибку:

cmd="pgrep -f $regex" 

if ! $cmd; then 
    echo "cmd failed." 
else 
    echo "ok." 
fi 
Смежные вопросы