Cygwin .bashrc n'étant pas source car cygwin démarre dans Windows home

9

REMARQUE: veuillez consulter ma deuxième modification ci-dessous pour une mise à jour sur le problème.

Cygwin fonctionnait bien pour moi jusqu'à la semaine dernière. Maintenant, .bashrc ne devient pas sourcé. Je dois avoir installé quelque chose ou changé quelque chose, mais je ne me souviens pas exactement de la cause du problème. Lorsque je démarre Cygwin, je suis dans ma maison Windows et aucun de mes alias ne fonctionne. Je dois source manuellement .bashrc. Ce qui suit est mon Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Des idées?

EDIT: Mon .bash_profile contient les éléments suivants,

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

EDIT2: IMPORTANT! Lorsque j'ai démarré Cygwin, il démarre dans mon dossier d'accueil Windows. J'ai essayé de mettre mon .bash_profile et .bashrc dans ce dossier et ils ont été correctement achetés! Cela signifie que le problème a été réduit à déterminer pourquoi Cygwin démarre dans le dossier de base Windows et non dans le dossier de base Cygwin normal.

EDIT3: Résultats de l'exécution de 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
la source
Lorsque votre shell bash démarre (et vous place dans votre répertoire personnel Windows), qu'est-ce qui echo $HOMEs'imprime?
Keith Thompson
Il fait écho à ma maison Windows, pas à ma maison Cygwin.
gsingh2011
Mais en utilisant la syntaxe Cygwin, non? ( /cygdrive/c/Users/fooplutôt que C:\Users\foo)
Keith Thompson
Oui, en utilisant la syntaxe Cygwin.
gsingh2011
Que se passe-t-il lorsque vous tapez HOME=/home/yourname bash -là l'invite du terminal? Si j'ai raison, cela devrait vous donner un shell fonctionnant correctement. Notez qu'il s'agit d'un diagnostic, ou au mieux d'une solution de contournement, pas d'une solution; nous devons encore comprendre pourquoi votre $HOMEerreur est en premier lieu. Le problème racine est le paramètre incorrect de $HOME; bash se comporte correctement.
Keith Thompson

Réponses:

9

La FAQ Cygwin explique comment $HOMEest défini:

Lors du démarrage de Cygwin à partir de Windows, HOMEest déterminé comme suit par ordre de priorité décroissante:

  • HOME à partir de l'environnement Windows, traduit au format POSIX.
  • L'entrée dans /etc/passwd
  • /home/USERNAME

Lorsque vous utilisez Cygwin à partir du réseau (telnet, ssh, ...), HOMEest défini à partir de /etc/passwd.

Si votre HOMEest défini sur une valeur telle que /cygdrive/c, il est probable qu'il ait été défini dans Windows. Démarrez une fenêtre de commande DOS et tapez set HOMEpour vérifier si c'est le cas.

L'accès aux lecteurs partagés est souvent limité lors du démarrage à partir du réseau, donc les utilisateurs du domaine peuvent souhaiter en avoir un différent HOMEdans l'environnement Windows (sur le lecteur partagé) que dans /etc/passwd(sur le lecteur local). Notez que ssh ne considère que /etc/passwd, sans tenir compte HOME.

Ma meilleure supposition est que vous avez foiré votre /etc/passwdfichier. (Le répertoire de base de Windows ne l'est %USERPROFILE%pas %HOME%.)

Que signifie grep USERNAME /etc/passwdimprimer (remplacer USERNAMEpar votre nom d'utilisateur)?

Keith Thompson
la source
J'ai ajouté la sortie à ma question afin qu'elle soit plus facile à lire. Il semble qu'il soit correctement réglé là-bas. Cependant, j'ai ouvert mes variables d'environnement Windows pour voir s'il y avait une variable% HOME% et il y en avait une et elle était définie sur% USERPATH%. Je l'ai supprimé, mais cela n'a pas résolu mon problème. Peut-être qu'il a besoin d'un redémarrage?
gsingh2011
1
L'avez-vous supprimé du panneau de configuration du système ou d'un shell de commandes Windows à l'aide de set HOME=? L'utilisation du panneau de configuration système est plus susceptible de fonctionner, mais un redémarrage peut être nécessaire même dans ce cas.
Keith Thompson
Je l'ai supprimé en cliquant avec le bouton droit sur Ordinateur dans le menu Démarrer, en cliquant sur les propriétés, en cliquant sur les paramètres système avancés, puis sur les variables d'environnement, puis en supprimant HOME. Un redémarrage était nécessaire. Cygwin charge maintenant le bon répertoire personnel. Merci pour l'aide.
gsingh2011
1

Si vous avez un .profile ou .bash_profile, qui provient de shells de connexion, et vous obtenez un shell de connexion depuis que vous avez réussi --login. Si vous sourcez .profile, bash ne source pas .bashrc.

J'essaierais de mettre:

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

dans votre .profile, voyez si cela aide. Votre .bashrc doit toujours provenir, comme d'habitude, d'autres invocations de shell sans connexion.

Et ne passez pas -ià bash; vous n'en avez pas besoin. Bash sorte de hacks qui, prétend, vous avez donné -isur la ligne de commande.

Rich Homolka
la source
Mon .bash_profile et .profile ont des lignes de code similaires. Voir ma question mise à jour.
gsingh2011
Excusez-moi, @Rich Homolka, mais j'aimerais savoir pourquoi dites-vous que ce -in'est pas nécessaire. Merci.
Sopalajo de Arrierez
@SopalajodeArrierez si vous avez un shell interactif (pas un script, mais actif sur un terminal), bash prétend que vous l'avez donné -isur la ligne de commande. Essayez d'ouvrir une fenêtre de shell bash, alors echo $-, vous devriez voir i(parmi d'autres drapeaux)
Rich Homolka
1

J'ai rencontré le même comportement - probablement après avoir installé git (Windows).

Dans le paramètre système, j'ai trouvé la variable utilisateur HOME = C: \ Users \ me et la réinitialiser à HOME = D: \ home

user377223
la source