У меня есть Баш скрипт, который пытается вызвать 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. Те же результаты, я действительно не вижу проблемы.
+1 для двойного цитирования и удаления одиночных кавычек из строки шаблона. Однако, вероятно, вам следует указать и на второе изменение. –
@JonathanLeffler: спасибо за внимание. –
Редактировать: Извините, stackoverflow отправил мой комментарий, а не вставлял новую строку ... Ваше решение работает, спасибо! Не могли бы вы объяснить мне, почему «работает», когда я запускаю команду в командной строке, но в моем скрипте она требует «»? Спасибо – alex