Например, я хочу выполнить:
ps x | grep something | grep -v grep | somecommand
Я хочу выполнить somecommand
, только если что-то запущено. Как это сделать?
Вы можете использовать if
. Кроме того, для grep для команды, но для исключения самой grep, вы можете использовать следующий прием:
if ps x | grep '[s]omething' ; then
echo Running.
else
echo Not running.
fi
Это просто:
pgrep something && somecommand
pgrep
похоже на ps | grep something | grep -v grep
, более кратко, но с меньшим количеством опций для управления выходом. Однако вам не нужно беспокоиться, что вы случайно отфильтруете что-то, что действительно необходимо (например, pgrep agreppina
будет работать, но ps x | grep agreppina | grep -v grep
не будет).
command1 && command2
чем-то напоминает любое соединение в языке программирования, команда2 будет выполняться только в том случае, если первая команда была успешной (фактически, если она вернула нулевой статус).
Вот решение
ps x | grep something | [[-n $(grep -v grep) ]] && somecommand