выполнитесь, если команда непуста

sudo kill $(ps aux | grep '[p]ostgres'|awk '{print $2}')

Поскольку выше команды, я хочу, чтобы это выполнилось только если

$(ps aux | grep '[p]ostgres'|awk '{print $2}')

непусто, иначе это бросит меня ошибка как это

enter image description here

Как я должен достигнуть этого?

0
задан 22 January 2018 в 20:32

1 ответ

steeldriver правильно упомянул в комментариях, что для Вашей определенной цели, лучше использовать pkill -f , начиная с фильтрации вывода ps через grep имеет оборотную сторону grep сама команда, появляющаяся на ps список. В отличие от этого,pkill doeesn't делают это, и работает чисто.

Что касается общего случая, где Вы хотели бы выполнить любую команду, если позиционный параметр к нему является пробелом, существует два способа приблизиться к нему. Один, сохраните к переменной и проверке, если переменная не пуста:

var=$(ps aux | grep '[p]ostgres'|awk '{print $2}')
if ! [ "x$var" = "x"  ]; then
    sudo kill "$var"
fi

Другой путь через xargs и --no-run-if-empty (или стенография -r):

ps aux | grep '[p]ostgres'|awk '{print $2}' | xargs --no-run-if-empty kill
1
ответ дан 31 October 2019 в 03:44

Другие вопросы по тегам:

Похожие вопросы: