Подстановка команды Bash переменной - PullRequest
1 голос
/ 08 февраля 2011

Я новичок в bash-скриптинге и учусь, работая над небольшим проектом, над которым я работаю.Однако я столкнулся с проблемой, которую, похоже, не могу обойти.

У меня есть переменная, которую мне нужно включить в команду.При запуске непосредственно в оболочке (с вводом переменной вручную) команда возвращает ожидаемый результат.Тем не менее, я не могу заставить его работать при использовании переменной.

Итак, если я запускаю это вручную, он корректно возвращает 0 или 1, в зависимости от того, запущен он или нет.

ps -ef | grep -v grep | grep -c ProcessName

Однако, когда я пытаюсь вставить это в предложение while, он всегда оценивается в 0, потому что не ищет правильный текст.

while [ `ps -ef | grep -v grep | grep -c {$1}` -ne 0 ]
do
  sleep 5
done

Есть ли способ, которым я могу сделать это?Я пробовал множество разных вещей безрезультатно.Я также пытался использовать синтаксис $ () для подстановки команд, но мне тоже не повезло.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

Я думаю, что вместо {$1} вы имеете в виду "$1".Кроме того, вы можете просто сделать pgrep -c "$1" вместо двух каналов.

Кроме того, нет необходимости сравнивать выходные данные grep -c с 0, так как вы можете просто увидеть, не выполнена ли командаили нет.Итак, гораздо упрощенная версия может быть:

while pgrep "$1" > /dev/null
do
    sleep 4
done
1 голос
/ 08 февраля 2011

Вы действительно должны использовать -C с ps, а не грязными каналами, если вы используете полное имя процесса. Если вы заинтересованы в подборе подстроки, то ваш способ - это единственное, о чем я могу думать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...