2012-02-20 7 views
2

У меня есть Баш скрипт, который пытается вызвать pgrep с аргументами (Over упрощенным):Баш скрипт/pgrep не работает, как ожидалось

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$' 

Когда я бегу PREG линия сама по себе, она выводит 7632, как и ожидалось.

Я делаю что-то неправильно здесь? Я пробовал с sh, тире и bash. Те же результаты, я действительно не вижу проблемы.

ответ

3

Вы должны окружить PATTERN в двойных кавычках:

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

См: quoting variables

Edit: и вторя я бы просто сделать:

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

+1 для двойного цитирования и удаления одиночных кавычек из строки шаблона. Однако, вероятно, вам следует указать и на второе изменение. –

+0

@JonathanLeffler: спасибо за внимание. –

+0

Редактировать: Извините, stackoverflow отправил мой комментарий, а не вставлял новую строку ... Ваше решение работает, спасибо! Не могли бы вы объяснить мне, почему «работает», когда я запускаю команду в командной строке, но в моем скрипте она требует «»? Спасибо – alex

2

Поскольку у меня нет 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" 

Я бы держать одиночные кавычки на assingment к PATTERN, но полностью согласны вам нужно DBL -quoting при использовании с pgrep или echo.

Надеюсь, это поможет.

+0

Сообщение об использовании из показанного 'pgrep' включает в себя' -f' без каких-либо аргументов. –

Смежные вопросы