2012-09-08 11 views

Antwort

8

Dies ist eine Variante des Exec Hack. In den Tagen, bevor Dolmetscher mit einer #! zuverlässig angegeben werden konnten, wurde dies verwendet, um die Shell Exec Perl zu machen. Die if 0 in der zweiten Zeile wird nie von der Shell gelesen, die nur die erste Zeile liest und execs perl, die if 0 liest und sich nicht selbst erneut ausführt.

Dies ist eine interessante Variante, aber ich denke nicht ganz richtig. Es scheint eingerichtet zu sein, entweder mit der Bourne-Shell oder mit csh-Varianten zu arbeiten, wobei das anfängliche eval verwendet wird, um die Shell zu bestimmen, die es parsiert, und dann die geeignete Syntax zu verwenden, um die Argumente an Perl weiterzuleiten. Der mittlere Abschnitt ist eine sh-Syntax und die letzte Klausel ist für csh geeignet. Wenn die zweite &&|| wäre und die ursprüngliche eval '(exit $?0)' tatsächlich in csh fehlschlagen würde, dann würde dies diese Ziele erreichen, aber wie geschrieben, glaube ich nicht, dass es für csh funktioniert. Gibt es einen Befehl, der dem vorausgeht, der $? auf einen Wert setzt, der auf der Shell basiert? Aber selbst wenn dies der Fall wäre und $? auf einen Wert ungleich Null gesetzt ist, würde nichts ausgeführt werden, wenn nicht && durch || ersetzt wird. Etwas Lustiges passiert.

+0

Danke! Was ist der "Exec Hack"? Meinst du einen 'Shebang'? –

+0

Der Exec-Hack ist im Grunde jede Technik, die exec verwendet, um einen bestimmten Interpreter aufzurufen, anstatt eine Shebang-Zeile zu verwenden. –

+0

Danke! Was wäre dann die äquivalente "Shebang" -Linie? Irgendwie sieht dieser "Eval" Check viel komplexer aus, als nur nach einem bestimmten Binary/Interpreter zu fragen. –

Verwandte Themen