Wie führe ich eine .sh- oder .command-Datei in Terminal aus?

87

Ich wollte schon immer ein Skript ausführen können, das ich online direkt aus dem Finder heruntergeladen habe, aber ein Doppelklick auf die Datei funktioniert nicht.

Maximus
quelle

Antworten:

103

Öffnen Sie das Terminal, geben Sie es ein sh /path/to/fileund drücken Sie die Eingabetaste.

Schneller ist es, shein Leerzeichen einzugeben und dann die Datei in das Fenster zu ziehen und das Symbol an einer beliebigen Stelle im Fenster freizugeben.

Maximus
quelle
3
Was wird Ihrer Meinung nach passieren, wenn das Shell-Skript in einer anderen Shell-Syntax wie tcsh, zsh oder ksh geschrieben wird? Das Suffix shkennzeichnet ein Shell-Skript, das nicht "das Skript in dieser Shell ausführen" soll.
fd0
3
@ fd0 Dafür sorgt die Shebang Line .
user14492
4
@ user14492- Wenn Sie ein Shell-Skript aufrufen, wird shell shell_scriptdie Shebang-Zeile ignoriert. Die Shell liest die erste Zeile als Kommentar.
fd0
@ fd0, ich verstehe nicht. Wie unterscheidet sich sh /path/to/fileeine Semantik von der Alternative /path/to/file.sh?
Pacerier
2
@ Pacerier- Im ersten Formular muss der aufrufende Benutzer in der Lage sein, die Datei zu lesen, und er muss auswählen, welcher Interpreter die Datei lesen soll. In der zweiten Form müssen die Berechtigungen der Datei für den aufrufenden Benutzer gelesen und ausgeführt werden, und der Interpreter wird durch den Hash-Knall in der ersten Zeile des Skripts bestimmt. In beiden Fällen interpretiert der Kernel das Suffix in der Datei nicht.
fd0
12

Alternativ könnten Sie auch tun

cd /directory/with/executable
chmod +x executable     # only required if your file is not already executable
./executable

welches auch die ausführbare Datei mit der angegebenen Shell ausführt (falls im shebang angegeben) #!/bin/(shell)

vielleicht doch
quelle
1
In der Frage steht "Führe ein Skript aus, das ich online heruntergeladen habe". Aus dem Internet heruntergeladene Dateien haben normalerweise die Berechtigung 644.
nohillside
@ Matrix Ich denke, es ist nicht nur das Internet, sondern jede Datei, die von einem anderen Dateisystem auf Ihr aufgrund der Standardmaske in Ihrem Konto kopiert wird.
rwenz3l
9
chmod u+x myfile.sh
cp myfile.sh /usr/local/bin

Bearbeiten ~/.bash_profileund fügen Sie die folgende Zeile hinzu:

alias myfile=./myfile.sh

Führen Sie die folgende Befehlszeile aus:

source ~/.bash_profile

Dann können Sie Ihre Datei als Programm ausführen

$ myfile

Reza Farshi
quelle
In Ubuntu kann jedes Skript in Ihrem Pfad so lange ausgeführt werden, wie Sie es haben #~/bin/sh, während OSXdas Skript eine .shErweiterung und eine aliasfür jedes von ihnen haben sollte. : -O
Fabrizio Bertoglio
6

Führen Sie die folgenden Schritte aus, um die Skriptdateien auszuführen:

  1. Klicken Sie mit der rechten Maustaste auf die .sh-Datei.

  2. Bewegen Sie den Mauszeiger über Öffnen mit .

  3. Wählen Sie Andere ... .

  4. Sie sollten in dem seine Applications Ordner. Öffnen Sie den Ordner Dienstprogramme und wählen Sie Terminal.app.

  5. Wenn Sie Terminal.app nicht auswählen können, ändern Sie die aktivierten Anwendungen von Empfohlene Anwendungen in Alle Anwendungen . Es ist am unteren Rand des Fensters.

  6. Wenn Sie jede .shDatei mit Terminal.app öffnen möchten , aktivieren Sie das Kontrollkästchen Immer öffnen mit .

  7. Klicken Sie auf die Schaltfläche Öffnen in der rechten unteren Ecke des Fensters.

stwykd
quelle
3

Der Grund, warum es nach dem Herunterladen nicht funktioniert, ist, dass die Dateiberechtigungen dies nicht zulassen. Um die Ausführungsberechtigungen zu aktivieren, öffnen Sie das Terminal und geben Sie Folgendes ein chmod 755 /path/to/script. Anstatt den vollständigen Pfad einzugeben, können Sie das Skript aus dem Finder in das Terminalfenster ziehen. Zum Ausführen einfach eingeben /path/to/script. Sie können die Datei auch hier per Drag & Drop in das Terminalfenster ziehen. Diese Syntax sollte das Skript unter Verwendung der korrekten Shell ausführen, die in der ersten Zeile des Skripts definiert ist.

Elliott
quelle
Meine Datei .sh wird im Texteditor geöffnet, mit dem ich die Datei erstellt habe. Wie kann ich es stattdessen im Terminal öffnen? Ich habe die richtigen Berechtigungen festgelegt.
Bart
@bart Sie müssen die Erweiterung .command hinzufügen, um ein Skript direkt im Finder auszuführen.
rwenz3l