Windows y Git Bash: Bash PATH para leer la variable de sistema Windows% PATH%


27

Recientemente agregué un directorio a la RUTA de Windows manualmente yendo al Panel de control -> Sistema -> Configuración avanzada del sistema -> Variables de entorno -> Variables de usuario -> RUTA. (Windows 7, 64 bits).

Después de reiniciar e iniciar cmd.exe, echo %PATH%indica que esto funcionó: veo el directorio que agregué recientemente en la salida.

Sin embargo, después de iniciar Git Bash, la salida de echo $PATHno incluye este directorio.

Podría agregar export PATH=$PATH:/c/my/pathmi bashrc, pero prefiero que Git Bash solo obtenga la RUTA de Windows para no tener que recordar agregar rutas a dos lugares. ¿Cómo se puede lograr esto?

(Una pregunta más general relacionada es, ¿qué configura el $ PATH de Git Bash? Veo un par de entradas repetidas en diferentes lugares, algunas cosas que están en Windows% PATH% están en el $ PATH de Git Bash pero no otras. Lo que sucede antes Recibo el mensaje de Git Bash que toca $ PATH?)


El trayecto en cuestión podría ser importante: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih

Respuestas:


6

Una sesión de msysgit git bash usa el script share/WinGit/Git Bash.vbs, que no accede ni modifica la variable de entorno PATH(como lo haría en este script vbs no relacionado, por ejemplo )

Una sesión de git bash simplemente se agregará frente a su actual PATH:

.:/usr/local/bin:/mingw/bin:/bin:

Es posible que la sesión de mingw empaquetada con msysgit no considere una binde otra instalación de mingw: puede verificarlo configurando otro directorio (más simple) en su PATHy ver si todavía está visible en su sesión de git bash. Si no, entonces es un problema más general que concierne a todos los directorios que agregaría a la RUTA.


1
Esto no parece ser correcto. Cuando inicio git bash, su ruta está configurada por algún proceso que aparentemente convierte la variable PATH de Windows a través de algún proceso. No es tan simple como agregar elementos adicionales: ';' se traduce a ':', los especificadores de unidad se convierten en nombres de directorio, y algunas otras conversiones también están ocurriendo. En algunos casos, esta conversión es incorrecta: "c:\Program Files\Java\jdk1.8.0_25"\binen mi ruta de Windows se convierte /c/Program Files/Java/jdk1.8.0_25"/bien la ruta de git bash (nota que falta el primer y último carácter) ... así que la pregunta es, ¿cómo sucede esto?
Jules

@Jules Eso es posible de hecho. Mucho ha cambiado en 5 años.
VonC

5

Aquí está mi pequeña solución para un problema similar (MSYS2 bash en Windows 10).

La idea es convertir las rutas requeridas en rutas de estilo Unix y agregarlas a bash $ PATH, todo hecho en .bashrc.

No agregue las rutas requeridas a Win PATH. En su lugar, cree una nueva variable de entorno en Windows, como MSYS2_WINPATH, y agregue todos los directorios de ruta de Windows separados por punto y coma a esta variable. Agregue% MSYS2_WINPATH% a% PATH%.

Ahora inserte esto en su .bashrc -

################################## Construct PATH variable ##################################

winpath=$(echo $MSYS2_WINPATH | tr ";" "\n" | sed -e 's/\\/\\\\/g' | xargs -I {} cygpath -u {})
unixpath=''

# Set delimiter to new line
IFS=$'\n'

for pth in $winpath; do unixpath+=$(echo $pth)":"; done

export PATH=$(echo $PATH:$unixpath | sed -e 's/:$//g')
unset IFS
unset unixpath
unset winpath

################################# Constructed PATH variable #################################

Intenté eso en git-bash y funcionó sin la solución para .bashrc. ¡Gracias!
Michael Haidl

bueno escuchar eso :) de nada.
anubhav

2

Si el valor PATH sería demasiado largo después de que la variable PATH de su usuario se haya concatenado en la variable PATH del entorno, Windows no podrá concatenar silenciosamente la variable PATH del usuario.

Esto puede suceder fácilmente después de instalar un nuevo software y agregar algo a PATH, rompiendo así el software instalado existente. Windows falla!

La mejor solución es editar una de las variables PATH en el Panel de control y eliminar las entradas que no necesita. Luego abra una nueva ventana CMD y vea si todas las entradas se muestran en "echo% PATH%".


1

Intente mover el directorio al comienzo de su variable de ruta. Tuve el mismo problema que tú después de instalar p4merge. El directorio de rendimiento se agregó a la ruta y cm4.exe encontró p4merge, pero no git shell (mingw). Después de una búsqueda infructuosa, intenté simplemente editar la variable para que el directorio de rendimiento apareciera primero en mi camino. Encendí git shell y, voila, el directorio está incluido en la salida de $ echo $path, y $ p4mergeabre p4merge.

Esta es una respuesta poco convincente, ya que no tengo idea de por qué funciona, pero si la solución ayuda a alguien más, genial.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.