He estado trabajando con la solución de Dragos desde hace un tiempo y la considero la mejor porque elimina la necesidad de usar "cygpath -u" dentro de los scripts de tu shell.
Luego quería tener características adicionales como arrastrar & soltar soporte para archivos .sh y .bash. Después de investigar un poco, escribí un .bat que asocia archivos .sh y .bash como "bashscript" y activa el Explorador de Windows para que los arrastre &. Tuve que editar el comando de Dragos para que manejara 1 argumento (la ruta al elemento caído en un script de shell).
El archivo .bat va más o menos de la siguiente manera:
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
El script "argshandler.sh" en la raíz de Cygwin solo cygpaths volver al primer argumento que recibe y nada en absoluto si no hay ninguno (son por ejemplo, si solo hace doble clic en un archivo de script):
#!/bin/bash
if [ ! "$1" == "" ]
then
cygpath -u "$1"
fi
Todo esto funciona bastante bien hasta el momento. Sin embargo, todavía hay algunos inconvenientes que sería bueno que resolver:
- comando Dragos' y mi derivado de ella fallar cuando se trata de secuencias de comandos que se encuentran en las rutas UNC, por ejemplo \\ myserver \ myshare \ scriptfile.sh
- Solo 1 elemento eliminado se pasará al script de shell.
De alguna manera, en relación con la 1-ítems lanzadas desde el único problema, cambiando el guión manejador argumento de devolver algo así como
"cygpathed-arg1" "cygpathed-arg2" "cygpathed-arg3"
y cambiando el colocador de mando Dragos' a algo como
...; bash "$(cygpath -u "%%1")" $(/argshandler.sh "%%2" "%%3" ... "%%9")'
(tenga en cuenta que el "" alrededor de la parte argshandler.sh se ha ido) no parece funcionar correctamente: si algunos de los elementos arrastrados a un script contienen un espacio en blanco en su ruta, dichos caminos se dividirán en múltiples argume nts en los espacios en blanco a pesar de que cada uno de ellos está entre comillas dobles ... raro.
¿Hay algún profesional de línea de comando que se sienta capaz de resolver uno o ambos problemas?
Si sus scripts no requieren interacción con la consola, puede ejecutarlos completamente sin ventanas utilizando cygwin's run.exe. Simplemente cambie el comando a 'C: \ cygwin \ bin \ run.exe" bash -li "% 1"% * ' –
¿Alguien sabe cómo hacer esto en Windows 7? La opción" Tipos de archivo "parece que falta. – adib
¿Hay alguna? ¿una forma de que se lance en la consola de Cygwin en lugar de la ridícula consola MS para que pueda hacer algo como copiar y pegar correctamente? –