Cygwin .bashrc no es fuente porque cygwin comienza en Windows

9

NOTA: Consulte mi segunda edición a continuación para obtener una actualización sobre el problema.

Cygwin estuvo trabajando bien para mí hasta la semana pasada. Ahora .bashrc no se obtiene. Debo haber instalado o cambiado algo, pero no recuerdo exactamente qué causó el problema. Cuando inicio Cygwin, estoy en mi casa de Windows y ninguno de mis alias funciona. Tengo que fuente manualmente .bashrc. El siguiente es mi Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

¿Algunas ideas?

EDITAR: Mi .bash_profile contiene lo siguiente,

# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
  source "${HOME}/.bashrc"
fi

EDIT2: ¡IMPORTANTE! Cuando comencé Cygwin, comienza en mi carpeta de inicio de Windows. ¡Intenté poner mi .bash_profile y .bashrc en esta carpeta y se obtuvieron correctamente! Esto significa que el problema se ha reducido a descubrir por qué Cygwin se inicia en la carpeta de inicio de Windows y no en la carpeta de inicio normal de Cygwin.

EDITAR3: Resultados de ejecutar grep Gulshan / etc / passwd /

$ grep Gulshan /etc/passwd
Administrator:unused:500:513:U-Gulshan-HP\Administrator,S-1-5-21-1235613160-4193452482-2032876723-500:/home/Administrator:/bin/bash
Guest:unused:501:513:U-Gulshan-HP\Guest,S-1-5-21-1235613160-4193452482-2032876723-501:/home/Guest:/bin/bash
Gulshan:unused:1000:513:U-Gulshan-HP\Gulshan,S-1-5-21-1235613160-4193452482-2032876723-1000:/home/Gulshan:/bin/bash
gsingh2011
fuente
Cuando se inicia su shell bash (y lo coloca en su directorio de inicio de Windows), ¿qué echo $HOMEimprime?
Keith Thompson
Hace eco en mi casa de Windows, no en mi casa de Cygwin.
gsingh2011
Pero usando la sintaxis de Cygwin, ¿verdad? (en /cygdrive/c/Users/foolugar de C:\Users\foo)
Keith Thompson
Sí, usando la sintaxis de Cygwin.
gsingh2011
¿Qué sucede cuando escribes HOME=/home/yourname bash -len el indicador de terminal? Si estoy en lo cierto, esto debería darte un shell que funcione correctamente. Tenga en cuenta que esto es un diagnóstico, o en el mejor de los casos una solución alternativa, no una solución; Todavía tenemos que averiguar por qué su $HOMEincorrecta es en primer lugar. El problema raíz es la configuración incorrecta de $HOME; bash se está comportando correctamente.
Keith Thompson

Respuestas:

9

Las preguntas frecuentes de Cygwin explican cómo $HOMEse configura:

Al iniciar Cygwin desde Windows, HOMEse determina de la siguiente manera en orden de prioridad decreciente:

  • HOME del entorno de Windows, traducido al formulario POSIX.
  • La entrada en /etc/passwd
  • /home/USERNAME

Cuando se utiliza Cygwin desde la red (telnet, ssh, ...), HOMEse establece desde /etc/passwd.

Si HOMEse establece en un valor como /cygdrive/c, es probable que se haya configurado en Windows. Inicie una ventana de comandos de DOS y escriba set HOMEpara verificar si este es el caso.

El acceso a unidades compartidas a menudo está restringido cuando se inicia desde la red, por lo tanto, los usuarios de Dominio pueden desear tener un HOMEentorno diferente en Windows (en unidad compartida) que en /etc/passwd(en unidad local). Tenga en cuenta que ssh solo considera /etc/passwd, sin tener en cuenta HOME.

Mi mejor suposición es que has estropeado tu /etc/passwdarchivo. (El directorio de inicio de Windows es %USERPROFILE%, no %HOME%).

¿Qué grep USERNAME /etc/passwdimprime (reemplazando USERNAMEcon su nombre de usuario)?

Keith Thompson
fuente
He agregado el resultado a mi pregunta para que sea más fácil de leer. Parece que está configurado correctamente allí. Sin embargo, abrí mis variables de entorno de Windows para ver si había una variable% HOME% y la había y estaba configurada en% USERPATH%. Lo eliminé, pero no resolvió mi problema. Tal vez necesita un reinicio?
gsingh2011
1
¿Lo eliminó del panel de control del sistema o de un shell de comandos de Windows set HOME=? Es más probable que el uso del panel de control del sistema funcione, pero un reinicio podría ser necesario incluso en ese momento.
Keith Thompson
Lo eliminé haciendo clic derecho en Computadora en el menú de inicio, haciendo clic en propiedades, haciendo clic en la configuración avanzada del sistema, luego en las variables de entorno y luego eliminando INICIO. Un reinicio fue necesario. Ahora Cygwin carga el directorio de inicio correcto. Gracias por la ayuda.
gsingh2011
1

Si tiene un .profile o .bash_profile, esto se obtiene de los shells de inicio de sesión, y obtiene un shell de inicio de sesión desde que lo aprueba --login. Si obtiene .profile, bash no generará .bashrc.

Intentaría poner:

[ -f $HOME/.bashrc ] && source $HOME/.bashrc

en su perfil, vea si eso ayuda. Su .bashrc aún debe obtenerse, como es normal, en otras invocaciones de shell sin inicio de sesión.

Y no pases -ia bash; no lo necesitas Bash es un tipo de pirateo que, simula que diste -ien la línea de comando.

Rich Homolka
fuente
Mi .bash_profile y .profile tienen líneas de código similares. Ver mi pregunta actualizada.
gsingh2011
Disculpe, @Rich Homolka, pero me gustaría saber por qué dice que -ino es necesario. Gracias.
Sopalajo de Arrierez
@SopalajodeArrierez si tienes un shell interactivo (no un script, pero activo en una terminal), bash pretende que lo diste -ien la línea de comando. Intente abrir una ventana de bash shell, entonces echo $-, debería ver i(entre otras posibles banderas)
Rich Homolka
1

Experimenté el mismo comportamiento, probablemente después de tener instalado git (Windows).

En la configuración del sistema, encontré la variable de usuario HOME = C: \ Users \ me y restablecí esto a HOME = D: \ home

usuario377223
fuente