LINUX.ORG.RU

bash: проблема с if


0

0

Есть конструкция вида:

if [ `ps ax | grep some_program | grep -v grep` ]

if-then должен срабатывать если процесс some_program запущен. В разнообразных howto и в man bash приведён именно такой синтаксис для проверки на непустую строчку. Но почему-то при запущенном some_program всегда выдаётся ошибка программы [ «too many arguments». Пробовал строку с ps заворачивать в переменную, дописывать в начало и в конец кавычки и прочие манипуляции - не работает :(


Ответ на: комментарий от vasily_pupkin

Вариант в скобках, ИМХО, гораздо читабульнее нежели `blabla...`

CEMEH
()
Ответ на: комментарий от vasily_pupkin

> if [ ! -z «$(blabla...)» ]

a=\«`ps -ax | grep prog | grep -v grep`\» if [ ! -z $a ]

не работает. вариации с «$(a)» и т.д и т.п. не работают, тоже самое - «too many arguments»

tx
() автор топика
Ответ на: комментарий от tx

И даже рабочий вариант со скобками:

if [ «`ps -ax | grep -v grep | grep prog`» ]

Странно, но кавычки вокруг команды не делают её просто текстом и команда всё равно выполняется, что и было нужно.

tx
() автор топика
Ответ на: комментарий от tx

> Странно, но кавычки вокруг команды не делают её просто текстом и команда всё равно выполняется, что и было нужно.

Внутри двойных кавычек выполняется всякого рода раскрытие переменных и ``
В одинарных - нет.

А вобще pgrep проще, но менее портабельнее.

Nao ★★★★★
()
Ответ на: комментарий от tx

кстати такой тест может давать ложные срабатывания, т.к. в выводе ps -ax содержится много разной другой инфы кроме имени процесса. (путь до процесса, аргументы процесса)

Nao ★★★★★
()

if [ `ps ax | grep some_program | grep -v grep` ]

Если уж использовать этот набор команд, то так:

if ps -ef | grep -q 'ome_program' ; then

sdio ★★★★★
()
Ответ на: комментарий от Nao

> в выводе ps -ax содержится много разной другой инфы кроме имени процесса

Это само собой, способ не претендует на универсальность на все случаи жизни. :)

tx
() автор топика
Ответ на: комментарий от sdio

> if ps -ef | grep -q '[s]ome_program' ; then

Яростно поддерживаю! А ещё можно врубить set -o pipefail...

const86 ★★★★★
()
Ответ на: комментарий от nnz

Грепать ps, когда есть pgrep — сферическая глупость в вакууме.

Еще забыли про pidof

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.