Vielen Dank für alle Beiträge. Ich werde jetzt versuchen, meine eigene Frage zu beantworten und eine vollständige Anleitung zu den verschiedenen Möglichkeiten zum Ausführen von Skripten und Binärdateien bereitzustellen. Bitte bearbeiten und kommentieren Sie und wir werden in der Lage sein, etwas zu finden, das vollständig und korrekt ist. Hier ist mein Vorschlag:
Zunächst zwei Punkte:
Linux unterscheidet zwischen einem Befehl und einem Pfad . Ein Befehl wird nur so wie er ist an der Eingabeaufforderung eingegeben und führt eine integrierte Funktion aus oder veranlasst Linux, im $ PATH nach einer entsprechenden Binärdatei oder einem Skript zu suchen.
Damit Linux etwas als Pfad interpretieren kann, muss es mindestens einen Schrägstrich (/) enthalten. ZB in ./myScript
, ./
kann ziemlich überflüssig erscheinen - es dient nur dazu, Linux als Pfad und nicht als Befehl zu interpretieren.
Also, die Optionen zum Ausführen einer Binärdatei oder eines Skripts:
Ausführen einer Binärdatei binary
:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
Ausführen eines Skripts script
:
Sofern nicht anders angegeben, muss die Datei über Ausführungsberechtigungen verfügen.
$ script # execute a script that is on PATH. Will be executed in a new shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
Über Pony :
Skripte mit einem Knall (z. B. #!/bin/sh
) in der ersten Zeile geben an, welcher Interpreter verwendet werden soll.
- Dieser Interpreter wird verwendet, wenn er mit
./script
oder unter Verwendung eines Befehls ausgeführt wird: script
( script
muss sich auf dem Pfad befinden)
- Mit
sh script
wird der Knall ignoriert und in diesem Fall sh
als Dolmetscher verwendet
- Verwenden
. script
oder source
ignorieren Sie den She-Bang und verwenden Sie den aktuellen Interpreter (da .
oder source
gleichbedeutend damit ist, nur jede Zeile des Skripts in der aktuellen Shell auszuführen)
Fußnoten
* 1: Dies ist nur fast wahr. In bash sind sie in der Tat der gleiche Befehl, aber bei der Verwendung source
, script
werden in $ PATH gesucht werden vor dem aktuellen Verzeichnis. Das ist Bash, aber in POSIX-only-Shells source
funktioniert es nicht, aber es .
funktioniert. Verwenden Sie daher lieber Letzteres für die Portabilität.
* 2: Was tatsächlich passiert, ist, dass wir das binäre sh mit 'script' als Argument ausführen, wodurch 'sh' 'script' in seiner neuen Shell ausführt