O comportamento do comando é diferente quando executado por outro usuário (via su -c)

2

Eu quero matar todos os processos que correspondem a uma cadeia específica. Aqui está o meu script, que funciona muito bem:

echo 'ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print $2 }'' | xargs kill

Agora quero executar esse script de outro usuário por meio de 'su -c:

echo password | su -c "echo 'ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print $2 }'' | xargs kill" userName;

Meu problema é que quando grep verySpecificChain corresponde a vários processos, somente o primeiro elemento é passado para xargs kill :

30598  ==> killed
bash: line 1: 30599: command not found  ==> Not killed
bash: line 2: 30600: command not found  ==> Not killed
bash: line 3: 30606: command not found  ==> Not killed

Eu realmente gostaria de entender por que com ou sem su -c o comportamento do comando muda?

Estou executando o GNU bash, versão 4.2.53 (1) -release (x86_64-redhat-linux-gnu) no Fedora 20.

    
por Quentin Morrier 22.06.2016 / 09:04

2 respostas

0

Eu não posso explicar o que exatamente falha no seu exemplo ( então eu admito que é algum tipo de programação voodoo do meu lado ), mas essa é uma correção que (quase - veja abaixo *) funciona no meu bash (Debian):

  • livre-se de dentro de echo ;
  • escape $2 .

Resultado:

echo password | su -c "ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print \ }' | xargs kill" userName;

* Eu escrevi "quase funciona" porque o Debian não me deixa usar su em um pipe para ecoar a senha. Eu devo executá-lo sem inicial echo e digite a senha interativamente. Eu acho que não é um problema no Fedora do OP.

    
por 22.06.2016 / 09:58
2

Apenas pkill -f verySpecificChain

    
por 22.06.2016 / 10:19