Поведение команды отличается при ее выполнении другим пользователем (через su -c)

Поведение команды отличается при ее выполнении другим пользователем (через su -c)

Я хочу убить все процессы, которые соответствуют определенной цепочке. Вот мой скрипт, который работает довольно хорошо:

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

Теперь я хочу выполнить этот скрипт от другого пользователя через `su -c:

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

Моя проблема в том, что при grep verySpecificChainсовпадении нескольких процессов передается только первый элемент 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

Мне бы очень хотелось понять, почему с su -cкомандой или без нее поведение меняется?

Я использую GNU bash версии 4.2.53(1)-release (x86_64-redhat-linux-gnu) на Fedora 20.

решение1

Толькоpkill -f verySpecificChain

решение2

Я не могу объяснить, что именно не получается в вашем примере (так что я признаю, что это своего рода вуду-программирование с моей стороны), но это исправление (почти — см. ниже*) работает в моем bash (Debian):

  • избавиться от внутренней части echo;
  • побег $2.

Результат:

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

*Я написал "почти работает", потому что Debian не позволяет мне использовать suконвейер для вывода пароля. Я должен запустить его без инициалов echoи ввести пароль интерактивно. Думаю, в Fedora OP это не проблема.

Связанный контент