execute se o comando não estiver vazio

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

Para o comando acima, quero que ele seja executado somente se

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

não é vazio, caso contrário, isso me causará um erro como este

Como devo conseguir isso?

    
por william007 23.01.2018 / 04:32

1 resposta

1

steeldriver mencionado corretamente no comentários que, para sua finalidade específica, é melhor usar pkill -f , pois a saída de filtragem de ps via grep tem desvantagem de grep próprio comando que aparece na lista ps . Por outro lado, pkill não faz isso e executa de forma limpa.

Quanto ao caso geral onde você deseja executar qualquer comando se um parâmetro posicional estiver em branco, há duas maneiras de abordá-lo. Um, salve a variável e verifique se a variável não está vazia:

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

A outra maneira é via xargs e --no-run-if-empty (ou short-hand -r ):

ps aux | grep '[p]ostgres'|awk '{print $2}' | xargs --no-run-if-empty kill
    
por Sergiy Kolodyazhnyy 23.01.2018 / 07:23