Kann ich ECHO verwenden, um Befehle auszuführen?

8

Ich habe ein cooles Skript entwickelt, das die Ausgabe erzeugt, die ich brauche, aber es wird nur auf dem Bildschirm angezeigt, also muss ich kopieren und dann die Befehle einfügen, um sie auszuführen. Hier ist die verkürzte Version meines Skripts:

%Vor%

Okay, es durchläuft also die Liste der IP-Adressen in iptext.txt, dann folgt eine geoIP-Suche, wenn (in diesem Beispiel) zwei geoIP-Übereinstimmungen in der Liste vorhanden sind, sagen wir für Armenien und Brasilien, I Die Ausgabe wird wie folgt im Shell-Fenster angezeigt:

%Vor%

Das ist großartig, aber ich möchte mehr als nur ausgeben, ich möchte, dass der Befehl /etc/csf/csf.pl -d ausgeführt wird, und die IP in den Zeilen, die mit dem Ländernamen übereinstimmen, in der Liste blockieren (nur und nur).

Ich habe verschiedene Dinge mit meinen begrenzten Kenntnissen des Shell-Scriptings ausprobiert, aber bisher scheint nichts zu funktionieren. Also gibt es eine Option für ECHO, die ich vermisse, die tatsächlich den Befehl ausführen würde, anstatt nur die Linie auszudrucken?

    
jols 16.07.2013, 10:27
quelle

6 Antworten

8

Eine einfache Methode, die keine Änderung Ihres Skripts erfordert, wäre die Ausgabe des Befehls an eine andere Bash-Instanz. So:

%Vor%

Das - teilt bash mit, dass es Befehle von stdin lesen soll.

Wenn Sie jedoch keine schnelle Lösung suchen, können Sie den Befehl auch dynamisch erstellen und ausführen. So:

%Vor%     
hek2mgl 16.07.2013 10:30
quelle
7

Sie können eval verwenden, um eine Zeichenfolge auszuführen:

%Vor%     
Syntax 16.07.2013 10:38
quelle
5

Es gibt einen bash-eingebauten Eval, der Befehle ausführt, so wie sie in Ihrer Shell eingegeben wurden. Zum Beispiel können Sie in Ihrem Skript Folgendes tun:

%Vor%

Damit wird Ihr Echo in einer Subshell verarbeitet und die Ausgabe wird so ausgeführt, wie Sie es in Ihrer Shell eingegeben haben, gefolgt von enter.

Siehe unten, Auszug aus Bash-Handbuch:

  

eval [arg ...]                 Die Argumente werden gelesen und zu einem einzigen Befehl verkettet. Dieser Befehl wird dann von der Shell gelesen und ausgeführt, und ihr Exit-Status wird als zurückgegeben                 der Wert von eval. Wenn keine Argumente oder nur Nullargumente vorhanden sind, gibt eval 0 zurück.

    
Flo Doe 16.07.2013 10:41
quelle
1

Setze deinen Befehl einfach so in Klammern:

%Vor%     
Neeraj Verma 29.07.2017 13:32
quelle
0

Verwenden Sie grep -E und stattdessen ein Muster:

%Vor%

Erklärung: echo wird den Befehl drucken, aber nicht ausführen. Lassen Sie es einfach weg, um den Befehl tatsächlich auszuführen.

Und anstatt das Skript fünfmal auszuführen, verwenden Sie grep , um nach einem der fünf Muster gleichzeitig zu suchen.

Und Sie sollten

verwenden %Vor%

statt Backticks; es ist sicherer.

    
Aaron Digulla 16.07.2013 10:41
quelle
0
%Vor%

obigen Befehl funktioniert für mich.

    
Bobo 16.03.2017 18:00
quelle

Tags und Links