$(
немного важен и немного меняет значение.Хотя в этом случае из-за того, что grep -q
никогда не выводится, вы можете просто обойтись без $(
.Возможно, вы захотите начать с чего-то вроде (как указано другими):
if ps aux | grep -v 'grep' | grep -q 'bla bla'; then
echo 'Found'
fi
В любом случае, вы начали с
if $(ps aux | grep -q "bla bla") ; then echo "found" ; fi
с $(
, командой внутри $( )
выполняется, и результат этой команды используется в качестве командной строки для внешней команды.Выполните эти четыре эксперимента:
# if $(echo nonexistant ; true) ; then echo "found" ; fi
nonexistant: command not found
# if $(echo nonexistant ; false) ; then echo "found" ; fi
nonexistant: command not found
# if $(echo ; true) ; then echo "found" ; fi
found
# if $(echo ; false) ; then echo "found" ; fi
Таким образом, согласно этому вы получите get found
, если оба эти условия выполняются:
- Команда внутри
$( )
, созданная нетoutput - и команда была успешной
Это говорит о том, что ps aux | grep -q "bla bla"
был успешным и не создал выходных данных.Неудивительно, что grep -q
не создает вывода.Вот для чего -q
.Следовательно, ваша команда должна была иметь истинный статус, что означает, что grep успешно нашел совпадение.Мы знаем, что grep
всегда найдет совпадение в этом случае, потому что список процессов из ps
будет включать в себя grep
;grep всегда найдет себя.