Führen Sie die .sh-Datei mit Doppelklick auf Windows mit Cygwin aus

16875
Rotareti

Ich habe eine .sh-Skriptdatei auf meinem Windows-Computer erstellt. Ich möchte es per Doppelklick ausführen. Wenn ich das Cygwin-Terminal öffne und es manuell mit dem Befehl "sh" starte, läuft es problemlos.

Wenn ich .sh-Dateiendungen mit c: \ cygwin \ bin \ sh.exe und Doppelklick auf script.sh verbinde, wird ein Terminal für eine Millisekunde angezeigt und verschwindet ohne Wirkung. Ich denke, das Problem ist, dass sh.exe folgendermaßen gestartet werden muss:

C:\cygwin64\bin\sh.exe --login –i 

Aber wie richte ich Windows aus, .sh-Dateien so auszuführen?

6

4 Antworten auf die Frage

7
Thomas Dickey

Sie müssen einen %1Parameter hinzufügen, damit die Assoziation funktioniert, z. B. folgendermaßen (Anführungszeichen werden benötigt, um mit Pfaden zu arbeiten, die eingebettete Leerzeichen enthalten):

C:\cygwin64\bin\sh.exe -li "%1" 

Die Frage wurde zuvor an mehreren Stellen gestellt. diese können hilfreich sein:

Das Fenster wird jedoch geschlossen, wenn das Skript abgeschlossen ist - es sei denn, Sie treffen Vorkehrungen im Skript, z. B. indem Sie dem readBefehl einen Befehl folgen (da die Assoziation das Skript nur als Argument übergibt). Hier sind einige Diskussionen zu diesem Aspekt:

Wo genau gründen Sie diese Assoziation? Ich bin unter Windows 10 und kann ein Programm nur mit einer Dateierweiterung verknüpfen, aber keine hinzuzufügenden Parameter hinzufügen / bearbeiten. Totte Karlsson vor 6 Jahren 0
Einige fragten, dass [hier] (https://answers.microsoft.com/de-de/windows/forum/windows_10-other_settings-winpc/file-associations-and-parameter-passing/2cc65f1a-6f45-4091-a027-5d77c99877e8 ). [This] (https://superuser.com/questions/136133/how-do-i-set-advanced-file-associations-in-windows-7) ist ähnlich, aber älter. Thomas Dickey vor 6 Jahren 0
4
Drew Chapin

Ich war mit den anderen Antworten, die hier und anderswo im Internet gefunden wurden, unzufrieden, daher habe ich viel Zeit darauf verwendet, um herauszufinden, wie man das richtig macht. Hier ist was ich mir ausgedacht habe.

  1. Erstellen Sie einen Schlüssel mit dem Namen .shund setzen Sie den (Default)Wert Shell Scriptunter HKEY_CLASSES_ROOT.
    • Erstellen Sie einen Schlüssel mit dem Namen Shell Scriptunter HKEY_CLASSES_ROOT, und setzen Sie den (Default)Wert auf Shell Script.
  2. Erstellen Sie einen Schlüssel mit dem Namen shellunter HKEY_CLASSES_ROOT\Shell Script.
  3. Erstellen Sie einen Schlüssel, der openunter genannt wird, HKEY_CLASSES_ROOT\Shell Script\shellund setzen Sie den (Default)Wert auf Run with Cygwin.
  4. Erstellen Sie einen Schlüssel, der commandunter genannt wird, HKEY_CLASSES_ROOT\Shell Script\shell\openund setzen Sie den (Default)Wert auf "C:\cygwin64\bin\mintty.exe" -i /Cygwin-Terminal.ico C:\cygwin64\bin\bash.exe -l -c "cd $(dirname \"$(cygpath -u \"%1\")\") ; $(cygpath -u \"%1\") ; exec bash"(ändern Sie C:\cygwin64\, C:\cygwin\wenn Sie die 32-Bit-Version verwenden).

Jetzt können Sie einfach auf die .sh-Datei doppelklicken und sie wird so ausgeführt, wie Sie es erwarten.

Bonus:

  1. Erstellen Sie einen Schlüssel, der DefaultIconunter genannt wird, HKEY_CLASSES_ROOT\Shell Scriptund setzen Sie den (Default)Wert auf %SystemRoot%\System32\imageres.dll,-68. Dadurch wird das Standardsymbol der Stapeldatei auf Ihre Shell-Skripts angewendet.

Ich habe auch eine Registry-Patch-Datei erstellt (Speichern unter Run With Cygwin.reg):

Windows Registry Editor Version 5.00  [HKEY_CLASSES_ROOT\.sh] @="Shell Script"  [HKEY_CLASSES_ROOT\Shell Script] @="Shell Script"  [HKEY_CLASSES_ROOT\Shell Script\DefaultIcon] @="%SystemRoot%\\System32\\imageres.dll,-68"  [HKEY_CLASSES_ROOT\Shell Script\shell]  [HKEY_CLASSES_ROOT\Shell Script\shell\open] @="Run with Cygwin"  [HKEY_CLASSES_ROOT\Shell Script\shell\open\command] @="\"C:\\cygwin64\\bin\\mintty.exe\" -i /Cygwin-Terminal.ico C:\\cygwin64\\bin\\bash.exe -l -c \"cd $(dirname \\\"$(cygpath -u \\\"%1\\\")\\\") ; $(cygpath -u \\\"%1\\\") ; exec bash\"" 
0
Rotareti

Am Ende habe ich festgestellt, dass dies die beste Lösung für meinen Windows 7-Computer ist.

1.Gehen Sie zu "Control Panel" > "Default Programs" > "Set Associations"und ordnen Sie eine .shDatei mit der Endungc:\cygwin\bash.exe

2.Öffnen Sie regeditund gehen Sie zu HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open\commandund ändern Sie es in"C:\cygwin\bin\bash.exe" -li "%1"

Hier gefunden https://stackoverflow.com/a/106325/1612318 (Kommentar von Matthias)

0
Jeffrey Magedanz

Fügen Sie Folgendes in eine Batchdatei ein, und wählen Sie es für "Öffnet mit" für ".sh" -Dateien aus:

@echo off C:\cygwin\bin\bash.exe -lc "cd ""%cd%""; ""$(cygpath -u "%1")""" 

"Cd" "% cd%" ";" part stellt sicher, dass das Shell-Skript immer in demselben Verzeichnis startet, aus dem es aufgerufen wurde, auch wenn Ihr Bash-Profil in Ihrem Heimatverzeichnis zu starten versucht. Die mehrfachen Anführungszeichen in doppelten Anführungszeichen sind notwendig, um Backslashes zu umgehen und Leerzeichen in Pfadnamen zuzulassen.

Eine Alternative zur Option login (-l), um sicherzustellen, dass nicht eingebaute Befehle verfügbar sind, ist das Hinzufügen des Verzeichnisses bin zu Ihrem Pfad:

@echo off set path=%path%;C:\cygwin\bin bash -c """$(cygpath -u "%1")"""