2012-03-22 13 views
7

Dopo avviare la shell cygwin, semplicemente individuare in un torto directory home:Cygwin shell non esegue .bashrc

[email protected] ~ 
$ pwd 
/cygdrive/c/Users/xfire 

Ma ha usato per essere/home/xfire

[email protected] /etc 
$ cat passwd | grep xfire 
xfire:unused:22773:10513:U-CORP\xfire,S-1-5-21-527237240-725345543-682003330-12773:/home/xfire:/bin/bash 

E il .bashrc in/home/xfire non è stato eseguito, anche se lo copio in/cygdrive/c/Users/xfire, anche questo non funziona!

+0

Controllare questo: http://www.cygwin.com/ml/cygwin/2002-01/msg00826.html – jahroy

+0

Alcuni programmi aggiungono un ambiente "HOME" nel registro di Windows e impostano il valore su "C: \ Users \ xfire ", ecco perché cygwin considera quella directory come la casa. http://cygwin.com/faq-nochunks.html –

+0

Uso inutile di cat: 'grep xfire passwd'. – Jens

risposta

6

Alcuni programmi aggiungono un ambiente "HOME" nel registro di Windows e impostano il valore su "C: \ Users \ xfire", ecco perché cygwin prende quella directory come casa. cygwin.com/faq-nochunks.html

+0

Peccato che questa sia stata la tua risposta e quindi non è stata riportata all'inizio quando la hai scelta come risposta corretta, perché le due risposte votate in alto sono praticamente inutili se la variabile HOME non è impostata come ti aspetti. –

+0

Beh, questo spiega perché succede, ma non COME per risolvere il problema ... – bgusach

+0

Voglio dire, so che funziona se lo cancello, ma se fossi ancora in HOME? – bgusach

31

Su Cygwin, aggiungo questo al mio ~/.bash_profile:

. ~/.bashrc 
+3

Questo l'ha risolto per me. Forse potresti chiarire cosa sta succedendo e perché Evans Y. vuole accettare la sua risposta? –

+1

Per altri che potrebbero essere curiosi del perché. Il programma terminale predefinito di cygwin è aggiornato. Se controlli le proprietà dell'icona che usi per avviare il terminale, scoprirai che termina con un "-" solitario. Questo dice a mintty di eseguire la shell come shell di login. Bash a sua volta esegue solo .bashrc se la shell è ** non ** una shell di login. Per le shell di login esegue solo .bash_profile (o .profile). In molti altri unix, i programmi terminali avviano la shell come shell non di login in modo che eseguano il file .bashrc per impostazione predefinita anziché .bash_profile. – Aner

1

È inoltre possibile anche impostare la variabile BASH_ENV, ad esempio, BASH_ENV = 'C: \ DOCUME ~ 1 \ dwyttenb \ .bashrc'

3

Sulla mia versione di Cygwin ho scoperto che solo ~/.profile veniva execueted così aggiunti

if [ -e "${HOME}/.bash_profile" ]; then 
    source "${HOME}/.bash_profile" 
fi 

al file .profile. Il mio file .bash_profile contiene un altro test per .bashrc e lo esegue dall'interno. Ho anche aggiunto le seguenti due righe al mio file .bashrc.

export BASH_ENV="${HOME}/.profile" 
export ENV="${HOME}/.profile" 

Il primo di questi assicura che .profile viene eseguito nei terminali non interattivi e la seconda assicura Viene eseguito in terminali POSIX. Ho trovato una spiegazione molto utile di ciò che viene eseguito e quando nel Bash Reference Manual.

Nel tuo caso non sarebbe d'aiuto in quanto hai un problema con il valore della tua variabile d'ambiente HOME ma questa pagina appare piuttosto in alto nella lista quando cerchi questo problema.

Problemi correlati