webentwicklung-frage-antwort-db.com.de

Verschiedene Methoden zum Ausführen von Binärdateien und Skripten

Ich benutze Linux seit einiger Zeit und habe nach einer vollständigen Übersicht gesucht, aber keine gefunden.

Ich bin einfach nicht mit all den verschiedenen Arten der Ausführung von Skripten und Binärdateien einverstanden - es ist alles ein großes Durcheinander für mich, und ich muss mich durch Ausprobieren entscheiden, was ich verwenden soll. Für eine Datei, die ein Skript oder ein binäres <script/binary> ist, kann ich die folgenden Alternativen finden:

<script/binary>
. <script/binary>
./<script/binary>
source <script/binary>
sh <script/binary>

(Sind da mehr?)

Kann jemand einen vollständigen Überblick darüber geben, welche Befehle mit welchen Dateitypen funktionieren und was der Unterschied ist, wenn es mehrere Optionen gibt?

Vielen Dank.

8
Carl

Die folgenden Befehle sind gleich, eine Punktkomponente bedeutet "aktuelles Verzeichnis". Damit die Dateien ausgeführt werden können, müssen sie über ausführbare Berechtigungen verfügen:

path/to/binary
./path/to/binary

Beachten Sie, dass ein Pfad, der keinen Schrägstrich enthält, als Befehl behandelt wird (entweder als integriertes Shell-Programm oder als Programm, das in der Umgebungsvariablen $PATH nachgeschlagen wird).

Die folgenden sind fast gleich, sie führen ein Shell-Skript (keine Binärdatei!) In der aktuellen Shell-Umgebung aus. Ein kleiner Unterschied zwischen den beiden Zeilen wird hier beschrieben nix.SE-Frage .

. path/to/script
source path/to/script

Schließlich haben Sie sh script erwähnt. Dies funktioniert wiederum nur für Shell-Skripte und nicht für Binärdateien. Grundsätzlich führen Sie das Programm sh mit dem Skriptnamen als Argument aus. Im Fall von sh wird dieses Argument nur als Shell-Skript behandelt und ausgeführt.

Antworten auf Shell-Skripte finden Sie unter Verschiedene Möglichkeiten, ein Shell-Skript auszuführen .

4
Lekensteyn

Vielen Dank für all den Input. Ich werde jetzt versuchen, meine eigene Frage zu beantworten und einen vollständigen Leitfaden für die verschiedenen Möglichkeiten zum Ausführen von Skripten und Binärdateien bereitzustellen. Bitte editieren 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 sind zwei Punkte zu nennen:

  • Linux unterscheidet zwischen einem Befehl und einem Pfad . Ein Befehl wird nur so wie er ist in der Eingabeaufforderung eingegeben und führt ein eingebautes aus oder veranlasst Linux, nach einer entsprechenden Binärdatei oder einem Skript zu suchen auf dem $ PATH.

  • Damit Linux etwas als Pfad interpretiert, muss es mindestens einen Schrägstrich (/) enthalten. Z.B. in ./myScript kann ./ ziemlich überflüssig erscheinen - es ist nur dazu da, Linux es als Pfad und nicht als Befehl interpretieren zu lassen.

So sind die Optionen zum Ausführen einer Binärdatei oder eines Skripts:

Ausführen eines binären 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 sie-Pony:

Skripte mit einem She-Bang (z. B. #!/bin/sh) in der ersten Zeile geben an, welcher Interpreter verwendet werden soll.

  • Dieser Interpreter wird verwendet, wenn er von ./script oder mit einem Befehl ausgeführt wird: script (script muss sich auf dem PATH befinden)
  • Wenn Sie sh script verwenden, wird der She-Bang ignoriert und in diesem Fall sh als Interpreter verwendet
  • Die Verwendung von . script oder source ignoriert den She-Bang und verwendet den aktuellen Interpreter (da . oder source der Ausführung jeder einzelnen Zeile des Skripts in der aktuellen Shell entspricht )

Fußnoten

* 1: Dies ist nur fast wahr. In bash sind sie in der Tat der gleiche Befehl, aber wenn source verwendet wird, wird script in $ PATH vor gesucht aktuelle Richtung Das ist bash, aber in POSIX-reinen Shells funktioniert source nicht, aber .. Verwenden Sie daher aus Gründen der Portabilität lieber Letzteres.

* 2: Was tatsächlich passiert, ist, dass wir die Binärdatei sh mit 'script' als Argument ausführen, wodurch 'sh' 'script' 'in der neuen Shell ausgeführt wird

3
Carl

Hier ist eine kurze Auflistung der Befehle. Wenn ich PATH erwähne, meine ich die Verzeichnisse, die dem System bekannte Programme enthalten. Sie finden diese mit echo $PATH, und es wird ungefähr so ​​aussehen: /home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Skripte

  • Verwenden Sie ./myscript.sh, um ein Skript im aktuellen Arbeitsverzeichnis auszuführen.
  • Um ein Skript für eine andere Datei auszuführen, verwenden Sie (wenn es sich im aktuellen Arbeitsverzeichnis befindet) ./myscript.sh textfile.txt
  • Skripte können auch mit Argumenten ausgeführt werden. wie in Rute (S. 68) erklärt: myfile.sh dogs cats birds gibt The first argument is: dogs, second argument is: cats, third argument is: birds aus, da der Inhalt dieses Skripts nach dem Shebang wie folgt lautet: echo "The first argument is: $1, second argument is: $2, third argument is: $3"

  • Verwenden Sie ~/Scripts/dogs.sh, um ein Skript in einem anderen Verzeichnis auszuführen.

  • Um ein Skript auszuführen, das dem System bekannt ist, weil es sich in Ihrem Bin-Ordner in Ihrem Home-Verzeichnis befindet (erstellen Sie es einfach, wenn es nicht vorhanden ist, da es automatisch Ihrem PATH hinzugefügt wird), verwenden Sie einfach scriptname
  • Um ein von Ihnen installiertes Skript auszuführen, verwenden Sie einfach wieder seinen Namen, da er dem System bekannt ist: zum Beispiel get_iplayer

Binärdateien

  • Um eine Binärdatei auszuführen, die dem System bekannt ist, weil sie sich in $ PATH befindet, verwenden Sie den Namen des Programms und alle Parameter, z. B. vlc <stream url to open>.
  • Verwenden Sie ~/<folder>/app/myprog, um eine Binärdatei zu testen, die Sie vor der Installation in/usr/local/bin kompiliert haben, oder um ein eigenständiges Programm vom System fernzuhalten.
2
user76204