Bash Script - Variabler Inhalt als auszuführender Befehl
Habe ich ein Perl-Skript, das gibt mir eine Liste mit zufälligen zahlen entsprechen den Zeilen einer Datei. Das, was ich will Nächstes zu tun ist, diese zu extrahieren Zeilen aus der Datei mit sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
Die variable var
liefert eine Ausgabe wie: cat last_queries.txt | sed -n '12p;500p;700p'
. Das problem ist, dass ich nicht die Ausführung dieses letzten Befehls. Ich habe versucht, mit $var
aber die Ausgabe ist nicht korrekt (wenn ich manuell ausführen, der Befehl funktioniert es einwandfrei, also kein problem). Was ist der richtige Weg, dies zu tun?
P. S: Sicher, ich könnte alles tun, die Arbeit in Perl, aber ich versuche zu lernen auf diese Weise, weil es könnte mir helfen, in anderen Situationen.
sed -n '12p;500p;700p' last_queries.txt
. InformationsquelleAutor der Frage Barata | 2011-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich Sie richtig verstehe, Sie brauchen nur zu tun (sorry, wenn ich verpasst Ihr Punkt):
Allerdings, wenn Sie wollen rufen Sie Ihre perl-Befehl später, und das ist der Grund, warum man es einer Variablen zuweisen, dann:
Als pro-bash-Hilfe:
InformationsquelleAutor der Antwort hmontoliu
Sind Sie wahrscheinlich auf der Suche nach
eval $var
.InformationsquelleAutor der Antwort August Karlstrom
nur mit Ihrer Datei statt.
In diesem Beispiel habe ich die Datei /etc/password, über die spezielle variable
${RANDOM}
(über die ich hier gelernt), und diesed
Ausdruck, den Sie hatte, der einzige Unterschied ist, dass ich mit Anführungszeichen anstelle von einzelnen zu ermöglichen, die variable expansion.InformationsquelleAutor der Antwort nhed
In dem Fall, wo Sie mehrere Variablen, die die Argumente für einen Befehl Sie ausführen möchten, und nicht nur eine einzelne Zeichenfolge, sollten Sie nicht Verwendung von eval direkt, wie es scheitern wird, in dem folgenden Fall:
Ergebnis:
Beachten Sie, dass obwohl "Manche arg" übergeben wurde, als ein einzelnes argument,
eval
Lesen Sie es als two.Stattdessen können Sie einfach die Zeichenfolge als Befehl selbst:
Beachten Sie den Unterschied zwischen den Ausgang des
eval
und die neueeval_command
Funktion:Ergebnis:
InformationsquelleAutor der Antwort Ajedi32