Das Befehlsverhalten ist anders, wenn es von einem anderen Benutzer ausgeführt wird (über su -c).

Das Befehlsverhalten ist anders, wenn es von einem anderen Benutzer ausgeführt wird (über su -c).

Ich möchte alle Prozesse beenden, die einer bestimmten Kette entsprechen. Hier ist mein Skript, das ziemlich gut funktioniert:

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

Nun möchte ich dieses Skript von einem anderen Benutzer über `su -c ausführen:

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

Mein Problem besteht darin, dass bei grep verySpecificChainÜbereinstimmungen mit mehreren Prozessen nur das erste Element an Folgendes übergeben wird 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

Ich würde wirklich gern verstehen, warum su -csich das Verhalten mit oder ohne den Befehl ändert.

Ich verwende GNU Bash, Version 4.2.53(1)-Release (x86_64-redhat-linux-gnu) auf Fedora 20.

Antwort1

Nurpkill -f verySpecificChain

Antwort2

Ich kann nicht erklären, was in Ihrem Beispiel genau fehlschlägt (also gebe ich zu, dass es eine Art Voodoo-Programmierung meinerseits ist), aber dies ist ein Fix, der (fast – siehe unten*) in meiner Bash (Debian) funktioniert:

  • innen loswerden echo;
  • Flucht $2.

Ergebnis:

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

*Ich habe „funktioniert fast“ geschrieben, weil Debian mir nicht erlaubt, sudas Passwort in einer Pipe zu wiederholen. Ich muss es ohne Initiale ausführen echound das Passwort interaktiv eingeben. Ich denke, das ist in Fedora des OP kein Problem.

verwandte Informationen