Csh-eval-Anweisung?
Ich versuche zu verstehen, wie die eval-Anweisung funktioniert. Hier ist ein Schnipsel code, den ich schaue, dass ich nicht verstehe:
eval '$SOME_DIR/util/dbget.pl \
VARIABLE1 \
VARIABLE2 \
VARIABLE3 \
VARIABLE4 '
Die Anführungszeichen sind diese komischen Links zeigender Französisch aussehende Dinge (nicht sicher, wie Sie Sie machen, und wenn Sie notwendig sind, in csh).
Sowieso meine erste Idee, nachdem einige der Forschung ist, dass eval nur Arten in die entsprechenden Zeichenfolgen in der Befehlszeile, was bedeutet, es läuft .pl-Skript, dann... ich bin mir nicht sicher, was es tut, mit diesen Variablen. Der Kommentar oben dieser code sagte: "ein paar Parameter" aber ich bin mir nicht sicher, was das bedeutet.
Tut eval 'VARIABLE' initialisieren der Variablen? Dies scheint der Fall zu sein, denn nachdem die eval den code geht auf diese Variablen verwenden, als ob Sie jetzt initialisiert (keine if-Anweisung überprüft, etc).
Ich bin eindeutig neue um diese Art von scripting und nur einen Sprung in ein großes repository. Vielen Dank für jede Hilfe.
- biegen Sie an der shell Debuggen mit
set -vx
(ich denke, dass ist das richtige für csh). Dann können Sie sehen, die Werte für die Variablen in den verschiedenen Stufen der Verarbeitung. Viel Glück. - Backticks sind in der oberen linken Seite der Tastatur, direkt neben der 1-Taste (in der Regel). Viel Glück.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, die backticks ersetzt mit der Ausgabe des Befehls zwischen Ihnen.
Den
eval
dauert, dass die Ausgabe und führt es als wenn Sie typisiert sind.In diesem Fall gehe ich von der perl ausgedruckt werden einige Variablenzuweisungen, wie
set VARIABLE1=value1
odersetenv VARIABLE1 value1
. In dem Fall, nach der obeneval
haben, sollten Sie$VARIABLE1
zur Verfügung, um später csh-code.Läuft gerade die .pl-Skript (was ich davon ausgehen ist, Perl), ohne die
eval
würde nicht auf die Umgebung der csh-Prozess. Durch die Verwendungeval
, geben Sie den Perl-code die Berechtigung zum ändern dieser Umgebung.Dies bedeutet, dass die Perl hat zu wissen, dass seine Ausgabe ist vorgesehen für csh, btw. In sh/bash ist die syntax von Variablen-Belegung ist anders.
ETA Mehr versucht Klarstellung:
Wenn Sie dies tun:
Erhalten Sie ein Bündel von Variablen, Zuweisungsanweisungen gedruckt auf Ihrem Bildschirm. Dies ist nicht sinnvoll, und hat keinerlei Auswirkungen auf die tatsächlichen Variablen in der shell.
Wenn Sie dies tun:
Erhalten Sie das gleiche Ergebnis in einer mehr Kreisverkehr Mode: statt der perl-code zu drucken, direkt auf Ihren Bildschirm, es ist Druck in einen Ausdruck, der übergeben bekommt, um die csh
echo
Befehl, und dann dieecho
ist, was tut der eigentliche Druck auf den Bildschirm. Diese Unterscheidung ist subtil, aber wichtig: die backticks nehmen Sie Steuern Weg von der perl und steckte es wieder in die Hände der Schale. Nachdem die Schale eingefangen hat die Ausgabe, es kann in einer Variablen gespeichert, Sie schreiben es in eine Datei, oder tun viele andere Dinge mit, die es dem Perl-code muss nicht umgeschrieben werden, zu beschäftigen. Perl ist einfach nur noch drucken.Wenn Sie dies tun:
Dann das, was die shell führt die Ausgabe des Perl -, als wenn es eingegeben an der Eingabeaufforderung. Dies ist sehr mächtig. Es ist auch gefährlich, weil die umgebenden Programm aufzieht, code auszuführen, der person, die schrieb, dass das Programm noch nie gesehen hat. So müssen Sie der Quelle Vertrauen, dass der code (in diesem Fall das perl-Skript), nicht zu produzieren, etwas zu beschädigen (intentinonally oder anderweitig).
eval
ist, was sagt csh, um den code auszuführen ausgedruckt, die von der perl.Beide
eval
und der backtick-syntax erläutert werden, die in die csh Manpage.Wenn Sie auf einem Linux-system, es ist wahrscheinlich, dass
csh
ist wirklichtcsh
eine verbesserte version des ursprünglichencsh
C-shell. Diese besonderen Merkmale sind die gleichen in beiden csh und tcsh. Die backtick-syntax aufruft, was heißt "Kommando-substitution".Unter Angabe der tcsh-man-Seite auf meinem system (mit einigen geringfügigen Verbesserungen zu vermeiden markdown ist eine Besondere Behandlung der Graviszeichen):
Und: