Подтвердить что ты не робот

Inline, если оболочка script

Возможно ли выполнить команду shell script в командной строке следующим образом:

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
>

Вышеприведенный пример не работает. Я получаю только символ > не результат, который я пытаюсь получить, то есть "true"

Когда я выполняю ps -ef | grep -c "myApplication, я получаю 1 вывод. Можно ли создать результат из одной строки в script? спасибо

4b9b3361

Ответ 1

Это не работает, потому что вы пропустили fi, чтобы закончить свой оператор if.

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi

Вы можете сократить его далее, используя:

if [ $(ps -ef | grep -c "myApplication") -eq 1 ]; then echo "true"; fi

Также обратите внимание на проблему соответствия ps -ef | grep ..., как указано в ответе @DigitalRoss.

Обновление

На самом деле вы можете сделать это лучше, используя pgrep:

if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi

Ответ 2

Да, при проблемах с синтаксисом исправлено

Это почти сработало. Правильный синтаксис:

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi

Но обратите внимание, что в выражении этого типа, включающем ps и grep, grep обычно будет соответствовать самому себе, потому что в списке ps отображаются символы grep -c Myapplication. Есть несколько способов обойти это, один из них - grep для чего-то вроде [M]yapplication.

Ответ 3

Другие ответы затронули вашу синтаксическую ошибку, но я настоятельно рекомендую вам изменить строку на:

test $(ps -ef | grep -c myApplication) -eq 1 && echo true

Если вы не пытаетесь ограничить число вхождений ровно 1 (например, если вы просто пытаетесь проверить выходную строку myApplication и вы ожидаете, что она никогда не появится более одного раза), тогда просто выполните:

ps -ef | grep myApplication > /dev/null && echo true

(Если вам нужен счетчик переменных для последующей обработки, ни одно из этих решений не будет подходящим.)

Использование короткого замыкания && и || операторы часто гораздо яснее, чем вложение, если/затем конструкции, особенно в однострочных.

Ответ 4

Я пытался объединить как несколько строк в команду, так и получить его результаты в переменной (а не в файле) и придумать это решение:

    FRA_PARAM="'db_recovery_file_dest'"
    FRA=$(
    sqlplus -S "/as sysdba" <<EOF
set echo off head off feed off newpage none pages 1000 lines 1000
select value from v\$parameter where name=$FRA_PARAM;
exit;
EOF
        )

Обратите внимание, что слово с одним кавычком было заменено, потому что в противном случае я получал его автоподстановку в двойные кавычки... ksh, HP-UX.

Надеюсь, это будет полезно и для кого-то еще.

Ответ 5

Я использую Mac OS, а после работы очень хорошо

$ counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true";fi;

True

Пространство необходимо после [и до]