kleines problem mit eval

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
joshi
Beiträge: 134
Registriert: 10.08.2005 02:54:33
Lizenz eigener Beiträge: GNU General Public License

kleines problem mit eval

Beitrag von joshi » 15.05.2018 11:42:42

Servus Kollegen,

ich versuche mich gerade an einem kleinen Script, welches wie folgt aussieht:

Code: Alles auswählen

#!/bin/bash

comm="ps aux | grep mc | awk '{print \$2;}' | xargs echo \"kill \$1\"";
eval $comm
Das soll jetzt auf meiner Testmaschine die ganzen Midnight Commande instanzen, die ich erstellt habe, kill-en. Wenn ich das Script ausführe, bekomme ich eigentlich ganz genau den String, den ich ausführen will. In meinem Fall hier
kill 431 24084 24110 24114 24116 24119 24121 24123 24126 24128 27193
Ich habs kontrolliert, die PIDs passen. Eigentlich sollte mir ja das Script so den Befehl ausführen, wenn ich die diversen Erklärungen im Netz richtig verstanden hab. Aber es gibt mir nur den richtigen String aus.
Verschiedene Kombinationen mit Klammern, Anführungszeichen usw... haben alles nichts gebracht. Ich bin mir sicher, dass es nur eine Kleinigkeit ist, ich komm aber nicht drauf.

Kann ja nur eine Kleinigkeit sein, aber ich komm nicht drauf.... Wenn jemand einen Tip für mich hätte, wär ich sehr dankbar..

LG
Joshi

uname
Beiträge: 12041
Registriert: 03.06.2008 09:33:02

Re: kleines problem mit eval

Beitrag von uname » 15.05.2018 12:04:19

Auf das Skript bzw. den Shebang würde ich wahrscheinlich verzichten. Vielleicht macht "echo" das Problem. Die Notwendigkeit von "eval" sehe ich auch nicht.

Lösung mit for:

Code: Alles auswählen

for i in $(ps aux | grep mc | awk '{print \$2;}'); do kill $i; done
Lösung mit xargs:

Code: Alles auswählen

ps aux | grep mc | awk '{print \$2;}'|xargs kill
Es gibt im übrigen Befehle wie "killall", die dein Problem evtl. auch lösen können.
Schau dir zudem mit "pstree" den Prozessbaum an. Vielleicht brauchst du gar nicht alle Prozesse einzeln killen.

Versuche evtl.

Code: Alles auswählen

killall mc

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: kleines problem mit eval

Beitrag von breakthewall » 15.05.2018 14:36:26

Irgendwie gehst etwas umständlich an diese Sache heran. Und hast auch Syntaxfehler in der Kommandozeile.

Könnte man auch so lösen:

Code: Alles auswählen

kill $(pgrep mc | paste -s -d " ")
Alternativ mit Array und Doublequotes:

Code: Alles auswählen

killmc=($(pgrep mc | paste -s -d " "))
kill "${killmc[@]}"
Es lohnt sich die ganzen GNU/Unix-Programme mal anzusehen, um eine Aufgabe möglichst effektiv zu lösen.

Antworten