Ich habe ein Perl-Skript, das mir eine definierte Liste von Zufallszahlen gibt, die den Zeilen einer Datei entsprechen. Als nächstes möchte ich diese Zeilen mit aus der Datei extrahieren sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
Die Variable var
gibt eine Ausgabe zurück wie : cat last_queries.txt | sed -n '12p;500p;700p'
. Das Problem ist, dass ich diesen letzten Befehl nicht ausführen kann. Ich habe es mit versucht $var
, aber die Ausgabe ist nicht korrekt (wenn ich den Befehl manuell ausführe, funktioniert er einwandfrei, also kein Problem). Was ist der richtige Weg, um dies zu tun?
PS: Sicher, ich könnte die ganze Arbeit in Perl erledigen, aber ich versuche auf diese Weise zu lernen, weil es mir in anderen Situationen helfen könnte.
$($cmd))
fehlschlug. Es heißt immer Befehl nicht gefunden. Vielen Dank!stattdessen nur mit Ihrer Datei.
In diesem Beispiel habe ich die Datei / etc / password unter Verwendung der speziellen Variablen
${RANDOM}
(über die ich hier erfahren habe) und dessed
Ausdrucks verwendet, den Sie hatten. Der einzige Unterschied besteht darin, dass ich doppelte Anführungszeichen anstelle von einfachen verwende, um die Variablenerweiterung zu ermöglichen.quelle
In dem Fall, haben Sie mehrere Variablen , die Argumente für einen Befehl enthalten , die Sie laufen lassen , und nicht nur eine einzelne Zeichenfolge, Sie sollten nicht eval direkt verwenden, wie es im folgenden Fall fehlschlagen wird:
Ergebnis:
Beachten Sie, dass "Some arg" zwar als einzelnes Argument übergeben wurde,
eval
es jedoch als zwei gelesen wird.Stattdessen können Sie die Zeichenfolge einfach als Befehl selbst verwenden:
Beachten Sie den Unterschied zwischen der Ausgabe von
eval
und der neueneval_command
Funktion:Ergebnis:
quelle
eval 'echo_arguments arg1 arg2 "Some arg"'
. Dann wird die Ausgabe wie in Ihrem zweiten Beispiel sein.