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