Я пытаюсь проверить, some_process
запущен ли процесс (предположим, он называется ) на сервере. Если это так, то echo 1, иначе echo 0.
Это команда, которую я использую, но она работает только частично (подробнее см. Ниже). Обратите внимание, что мне нужно написать скрипт в одну строку.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
Примечание:[s]
в some_proces[s]
это предотвратить grep
от возвращения себя.
Если some_process
работает, то "1"
получает эхо, что нормально. Однако, если some_process
не работает, ничего не отражается.
ps -Ccmd
чтобы найти процессы с именем команды "cmd", которые могут полностью исключитьgrep
.ps
установит код выхода на ненулевое значение, если не найдется соответствующий процесс.Ответы:
Нет необходимости явно проверять
$?
. Просто сделать:Обратите внимание, что это зависит от того, что эхо не дает сбоя, что, безусловно, не гарантируется. Более надежный способ написать это:
источник
echo 1
неecho 0
получится , то будет выполнен. В этом случае echo 1 никогда не завершится ошибкой, но обратите внимание, что A && B || С не если-то-иначе. C может работать, когда A истинно (из проверки оболочки ).if ps aux | grep some_proces[s]; then echo 1; else echo 0; fi
, Локально это, кажется, работает для меня. Это потому, что у ОП было перенаправление в команде, которую он пробовал?grep -q
или перенаправляются на / dev / null).pgrep
.&&
означает «и в случае успеха»; разместив своеif
заявление с правой стороны от него, вы гарантируете, что оно будет выполняться только приgrep
возврате0
. Чтобы исправить это, используйте;
вместо этого:(или просто используйте разрыв строки).
источник
Используйте
grep -vc
для игнорированияgrep
наps
выходе и подсчета строк одновременно.источник
Вы можете в полной мере использовать
&&
и||
оператор , как это:Для исключения самого grep, вы также можете сделать что-то вроде:
источник
больше единомышленников здесь
источник