sudo kill $(ps aux | grep '[p]ostgres'|awk '{print $2}')
Для команды выше, я хочу, чтобы она выполнялась только в том случае, если
$(ps aux | grep '[p]ostgres'|awk '{print $2}')
не пуст, иначе это вызовет ошибку, подобную этой
Как мне это достичь?
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):
[ f2]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
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