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