Ich arbeite seit einiger Zeit mit der Dragos-Lösung und halte sie für die beste Lösung, da sie die Notwendigkeit beseitigt, in Ihren Shell-Skripten "cypath -u" zu verwenden.
Ich wollte dann zusätzliche Funktionen wie Drag & Drop-Unterstützung für .sh und .bash-Dateien haben. Nach einigen Umgrabungen habe ich eine .bat geschrieben, die .sh- und .bash-Dateien als "bashscript" assoziiert und den Windows Explorer dazu aktiviert, den Drop-Handler für sie zu ziehen. Ich musste den Dragos-Befehl bearbeiten, damit er 1 Argument behandelt (der Pfad zum Element, das in einem Shell-Skript abgelegt wurde).
Die .bat-Datei geht in etwa wie folgt:
echo Registering .sh and .bash files as "bashscript"...
assoc .sh=bashscript
assoc .bash=bashscript
echo.
echo Setting the run command for the file type "bashscript"...
ftype bashscript=C:\cygwin\bin\bash.exe --login -i -c 'cd "$(dirname "$(cygpath -u "%%1")")"; bash "$(cygpath -u "%%1")" "$(/argshandler.sh "%%2")"'
echo.
echo Activating the drag^&drop capability for "bashscript" files (only 1 dropped item
echo will be passed to the script, multiple items are not supported yet)...
reg add HKEY_CLASSES_ROOT\bashscript\shellex\DropHandler /v "" /t REG_SZ /d "{60254CA5-953B-11CF-8C96-00AA00B8708C}" /f
Der „argshandler.sh“ Skript in der Wurzel nur das erste Argument cygpaths zurück Cygwin es überhaupt erhält und nichts, wenn es keine gibt (zB wenn Sie einfach auf eine Skriptdatei doppelklicken):
Das alles funktioniert bisher recht gut. Es gibt jedoch noch einige Nachteile, die sich gut lösen ließen:
- Der Befehl von Dragos und meine Ableitung davon scheitern, wenn es um Skripts geht, die sich auf UNC-Pfaden befinden, z. \\ myserver \ myshare \ scriptfile.sh
- Nur 1 abgelegte Artikel wird an das Shell-Skript übergeben.
Irgendwie über das 1 abgeworfenen-item-einzig Problem, das Argument Handler-Skript zu ändern, wie etwas zurück zu geben
"cygpathed-arg1" "cygpathed-arg2" "cygpathed-arg3"
und Ändern die Setter von Dragos' Befehl zu so etwas wie
...; bash "$(cygpath -u "%%1")" $(/argshandler.sh "%%2" "%%3" ... "%%9")'
(beachten Sie, dass die "" um den argshandler.sh Teil gegangen sind) scheint nicht richtig zu funktionieren: Wenn einige der Elemente auf ein Skript gezogen enthalten ein Leerzeichen in ihrem Pfad, diese Pfade werden in mehrere aufgeteilt werden argume nts an den Lücken, obwohl jeder von ihnen in Anführungszeichen eingeschlossen ist ... komisch.
Gibt es Kommandozeilenprofis, die sich dazu bereit fühlen, eines oder beide dieser Probleme zu lösen?
Wenn Ihre Skripts keine Konsoleninteraktion erfordern, können Sie sie mithilfe von cygwin run.exe vollständig fensterlos ausführen. Ändern Sie einfach den Befehl in 'C: \ cygwin \ bin \ run.exe" bash -li "% 1"% * ' –
Jeder weiß, wie man dies in Windows 7? Die Option" Dateitypen "scheint zu fehlen. – adib
Ist da Ein Weg, um es in Cygwins Konsole anstelle der lächerlichen MS-Konsole zu starten, damit Sie etwas wie Kopieren und Einfügen richtig machen können? –