Wie mache ich diese Datei.sh per Doppelklick ausführbar?

165

Zuerst benutze ich Mac.

Als nächstes muss ich diese "file.sh" ausführen, die wir nennen werden. Jedes Mal, wenn ich es ausführen muss, muss ich Terminal öffnen und Folgendes eingeben:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

Das ist in Ordnung, aber ich denke, es wäre viel schneller, wenn ich die Datei per Doppelklick ausführen würde, finden Sie nicht?

Meine Frage ist also, wie kann ich diese Datei per Doppelklick ausführbar machen?

Meine Ideen waren entweder:

a) etwas wie chmod in terminal eingeben und Berechtigungen ändern?

b) eine Datei erstellen, den oben geschriebenen Code einfügen ^ und diese Datei dann ausführbar machen?

c) irgendwie eine Automatisierung machen, um dies zu tun?

Welcher Weg ist der beste oder gibt es einen noch besseren? Erklären Sie bitte auch so viel wie möglich, ich bin neu im Terminal. Vielen Dank.

Jacob
quelle
1
Wenn Sie ein schönes, einfach zu klickendes Skript wünschen, dann ist Automator das richtige Werkzeug. Sie scheinen das aus Ihrer Frage zu wissen. Was ist Ihre Frage?
Rob Napier
gleiche Frage, aber ich habe jdk dmg, einige App-Ordner zum Erstellen von Symbolen, einige Jar .. aber ich kann nicht über Automator oder .command ausführen / erstellen
SANTOSH

Antworten:

349

Standardmäßig werden *.shDateien in einem Texteditor (Xcode oder TextEdit) geöffnet. Um ein Shell-Skript zu erstellen, das beim Öffnen in Terminal ausgeführt wird, benennen Sie es mit der Erweiterung "command", z file.command. Standardmäßig werden diese an Terminal gesendet, das die Datei als Shell-Skript ausführt.

Sie müssen auch sicherstellen, dass die Datei ausführbar ist, z.

chmod +x file.command

Ohne dies wird das Terminal die Ausführung verweigern.

Beachten Sie, dass das Skript #!in diesem speziellen Szenario nicht mit einem Präfix beginnen muss , da Terminal speziell die Ausführung mit Ihrer Standard-Shell anordnet. (Natürlich können Sie eine #!Zeile hinzufügen , wenn Sie anpassen möchten, welche Shell verwendet wird, oder wenn Sie sicherstellen möchten, dass Sie sie über die Befehlszeile ausführen können, während Sie eine andere Shell verwenden.)

Beachten Sie auch, dass Terminal das Shell-Skript ausführt, ohne das Arbeitsverzeichnis zu ändern. Sie müssen Ihr Skript mit einem cdBefehl beginnen, wenn Sie ihn tatsächlich benötigen, um mit einem bestimmten Arbeitsverzeichnis ausgeführt zu werden.

Chris Page
quelle
1
Vielen Dank für die hilfreichere Antwort.
Jacob
46
Sie können auch cd "`dirname "$0"`"das aktuelle Arbeitsverzeichnis auf das Verzeichnis einstellen, in dem sich Ihr Shell-Skript befindet.
Gearsdigital
3
Aus ästhetischen Gründen sollten Sie auch mit der rechten Maustaste auf die Befehlsdatei klicken und die Infos öffnen. Dort haben Sie die Möglichkeit, das Suffix (unter Name & Suffix) auszublenden.
Bijan
Ich benutze diese Methode, um Apps per open -n ...Befehl auszuführen . Es funktioniert, aber jedes Mal, wenn das Terminalfenster geöffnet wird und mir "[Prozess abgeschlossen]" angezeigt wird. Ist es möglich, das Erscheinen des Terminalfensters irgendwie zu verhindern?
Nik
1
@Nik Es macht keinen Sinn, es im Terminal auszuführen, wenn Sie nicht möchten, dass es in einem Terminalfenster angezeigt wird. Machen Sie es stattdessen zu einem Anwendungspaket, dessen ausführbare Datei ein Shebang-Skript ist. Oder erstellen Sie ein AppleScript- oder Automator-Applet, mit dem das Skript ausgeführt wird. Sie können auch die Terminaleinstellungen verwenden, um das Profil zu ändern und das Fenster zu schließen, wenn der Prozess beendet wird. Dies ist jedoch nicht die beste Lösung, wenn Sie nur ein Shell-Skript ohne Benutzerinteraktion ausführen möchten.
Chris Seite
31

Entfernen Sie die Erweiterung vollständig und doppelklicken Sie darauf. Die meisten System-Shell-Skripte sind so. Solange es einen Schebang hat, wird es funktionieren.

NobleUplift
quelle
1
Übrigens, "shebang" ist meistens diese Zeile vor allen Zeilen: #! / Bin / sh, aber es kann anders sein, lesen Sie den bereitgestellten Link für andere Fälle.
Lukas Liesis
Muss dieser Ansatz nicht chmod ausführen?
Atul
11

Sie können Finder einfach anweisen, die .shDatei im Terminal zu öffnen :

  1. Wählen Sie die Datei aus
  2. Holen Sie sich Info (cmd-i) darauf
  3. Wählen Sie im Abschnitt "Öffnen mit" im Popup-Menü "Andere ..."
  4. Wählen Sie Terminal als Anwendung

Dies hat genau den gleichen Effekt wie das Umbenennen in, .commandaußer dass Sie es nicht umbenennen müssen :)

Markus Amalthea Magnuson
quelle
8
  1. Starten Sie das Terminal
  2. Geben Sie -> nano fileName ein
  3. Fügen Sie den Inhalt der Batch-Datei ein und speichern Sie ihn
  4. Geben Sie -> chmod + x fileName ein
  5. Es wird eine exe-Datei erstellt, jetzt können Sie darauf doppelklicken.

Der Dateiname sollte in doppelten Anführungszeichen stehen. Da ich Mac- bin mit> In meinem Fall Inhalt der Batchdatei ist

cd / Users / yourName / Documents / SeleniumServer

Java-Jar Selen-Server-Standalone-3.3.1.jar-Rolle Hub

Es wird sicher funktionieren

Manish
quelle
0

Sie können die ausführbare Datei auf chmoddiese Weise ändern

chmod 755 file.sh

und verwenden Sie diesen Befehl zum Ausführen

./file.sh
Nachtcodierer
quelle
Willkommen bei SO! Ihre Antwort fügt der bereits akzeptierten Antwort nichts hinzu. Bitte erläutern Sie, warum sich dies von den anderen bereits vorhandenen Antworten unterscheidet.
GabrielOshiro