variable restaurar modificar java_home entorno crear configurar windows string bash path msys

restaurar - variable path windows 10



PATH de Windows para posix la conversión de ruta en bash (3)

¿Cómo puedo convertir una ruta del directorio de Windows (digamos c:/libs/Qt-static ) en la ruta correcta del directorio POSIX ( /c/libs/Qt-static ) mediante las funciones estándar de msys ? ¿Y viceversa?


¿Lo estás usando en cygwin? En caso afirmativo, hay una utilidad cygpath.exe llamada cygpath.exe en el paquete cygwin solo por hacer eso.

Output type options: -d, --dos print DOS (short) form of NAMEs (C:/PROGRA~1/) -m, --mixed like --windows, but with regular slashes (C:/WINNT) -M, --mode report on mode of file (binmode or textmode) -u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt) -w, --windows print Windows form of NAMEs (C:/WINNT) -t, --type TYPE print TYPE form: ''dos'', ''mixed'', ''unix'', or ''windows''


No sé msys , pero una búsqueda rápida en Google me mostró que incluye la utilidad sed . Entonces, suponiendo que funcione de manera similar en msys que en Linux nativo, aquí hay una forma de hacerlo:

De Windows a POSIX

Tendrá que reemplazar todas las barras invertidas con barras, eliminar los primeros dos puntos después de la letra de la unidad y agregar una barra al principio:

echo "/$pth" | sed ''s///////g'' | sed ''s/://''

o, como lo señala xaizek,

echo "/$pth" | sed -e ''s///////g'' -e ''s/://''

De POSIX a Windows

Tendrá que agregar un punto y coma, quitar la primera barra y reemplazar todas las barras con barras invertidas:

echo "$pth" | sed ''s/^////'' | sed ''s///////g'' | sed ''s/^.//0:/''

o más eficientemente

echo "$pth" | sed -e ''s/^////'' -e ''s///////g'' -e ''s/^.//0:/''

donde $pth es una variable que almacena la ruta de Windows o POSIX, respectivamente.


Aquí está mi implementación (probado en git bash).

De POSIX a Windows

sed '' /,/$, !s,$,/, /,^/, s,/,:/,2 s,^/,, s,/,//,g '' <<< "$@"

Trabaja para:

/c/git relative/dir c:/git ~ . .. /c /c/ ./relative/dir /sd0/some/dir/

excepto

/ <path with space>

Explicación:

/,^/, s,/,:/,2 (convierte /drive/dir/ a /drive:/dir/ ) es el corazón de la misma y se inserta : antes de la 2 nd / . Yo uso , para delim en lugar de / para legibilidad. Si comienza con / ( /,^/, ), entonces reemplace / con :/ por la segunda ocurrencia. No quiero asumir la longitud de la letra de unidad de 1, así que esto funciona para /sd0/some/dir .

s,^/,, elimina el / y s,/,//,g convierte todo / a / .

/,/$, !s,$,/, es manejar el caso de esquina de /c y asegurar 2nd / ( /c/ ) para que funcione el próximo comando.

Nota:

Si aquí la cadena <<< no funciona en su caparazón, entonces puede hacer echo y canalizar

echo "$@" | sed ...

Errata

Aquí e script