Cygwin .bashrc non è sorgente perché cygwin si avvia nella home di Windows


9

NOTA: vedere la mia seconda modifica di seguito per un aggiornamento sul problema.

Cygwin ha funzionato bene per me fino alla settimana scorsa. Ora .bashrc non sta ottenendo. Devo aver installato qualcosa o cambiato qualcosa, ma non ricordo esattamente cosa abbia causato il problema. Quando avvio Cygwin, sono nella mia casa di Windows e nessuno dei miei alias funziona. Devo fonte manualmente .bashrc. Quanto segue è il mio Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Qualche idea?

EDIT: il mio .bash_profile contiene quanto segue,

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

EDIT2: IMPORTANTE! Quando ho avviato Cygwin, questo si avvia nella mia cartella home di Windows. Ho provato a mettere il mio .bash_profile e .bashrc in questa cartella e sono stati forniti correttamente! Ciò significa che il problema è stato ridotto a capire perché Cygwin si avvia nella cartella principale di Windows e non nella normale cartella principale di Cygwin.

EDIT3: Risultati di eseguire 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

Quando la tua shell bash si avvia (e ti mette nella tua home directory di Windows), cosa echo $HOMEstampa?
Keith Thompson

Fa eco alla mia casa di Windows, non alla mia casa di Cygwin.
gsingh2011

Ma usando la sintassi di Cygwin, giusto? ( /cygdrive/c/Users/foopiuttosto che C:\Users\foo)
Keith Thompson

Sì, usando la sintassi di Cygwin.
gsingh2011

Cosa succede quando si digita HOME=/home/yourname bash -lal prompt del terminale? Se ho ragione, questo dovrebbe darti una shell funzionante. Si noti che questa è una soluzione diagnostica, o nella migliore delle ipotesi, non una soluzione; dobbiamo ancora capire perché il tuo $HOMEnon è corretto in primo luogo. Il problema di root è l'impostazione errata di $HOME; bash si sta comportando correttamente.
Keith Thompson

Risposte:


9

Le FAQ di Cygwin spiegano come $HOMEè impostato:

Quando si avvia Cygwin da Windows, HOMEviene determinato come segue in ordine di priorità decrescente:

  • HOME dall'ambiente Windows, tradotto in modulo POSIX.
  • La voce in /etc/passwd
  • /home/USERNAME

Quando si utilizza Cygwin dalla rete (telnet, ssh, ...), HOMEviene impostato da /etc/passwd.

Se il tuo HOMEè impostato su un valore come /cygdrive/c, è probabile che sia stato impostato su Windows. Avviare una finestra di comando DOS e digitare set HOMEper verificare se questo è il caso.

L'accesso alle unità condivise è spesso limitato quando si avvia dalla rete, pertanto gli utenti di dominio potrebbero desiderare di avere un ambiente diverso HOMEin Windows (su unità condivisa) rispetto a /etc/passwd(su unità locale). Si noti che ssh considera solo /etc/passwd, ignorando HOME.

La mia ipotesi migliore è che hai incasinato il tuo /etc/passwdfile. (La home directory di Windows è %USERPROFILE%no %HOME%.)

Cosa grep USERNAME /etc/passwdstampa (sostituendo USERNAMEcon il tuo nome utente)?


Ho aggiunto l'output alla mia domanda, quindi è più facile da leggere. Sembra che sia impostato correttamente lì. Tuttavia, ho aperto le variabili di ambiente di Windows per vedere se c'era una variabile% HOME% e c'era ed era impostata su% USERPATH%. L'ho rimosso, ma non ha risolto il mio problema. Forse ha bisogno di un riavvio?
gsingh2011

1
Lo hai rimosso dal pannello di controllo del sistema o da una shell dei comandi di Windows utilizzando set HOME=? L'uso del pannello di controllo del sistema ha maggiori probabilità di funzionare, ma potrebbe essere necessario un riavvio anche in quel momento.
Keith Thompson

L'ho rimosso facendo clic con il tasto destro su Computer nel menu Start, facendo clic su Proprietà, facendo clic su Impostazioni di sistema avanzate, quindi su Variabili d'ambiente e quindi rimuovendo HOME. È stato necessario un riavvio. Ora Cygwin carica la home directory giusta. Grazie per l'aiuto.
gsingh2011

1

Se si dispone di un .profile o .bash_profile, che viene fornito dalle shell di accesso e si ottiene una shell di accesso da quando si passa --login. Se provi .profile, allora bash non genererà .bashrc.

Proverei a mettere:

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

nel tuo .profile, vedi se questo aiuta. Il tuo .bashrc dovrebbe comunque provenire, come di consueto, da altre invocazioni della shell non di accesso.

E non passare -ia bash; non ne hai bisogno. Bash tipo di hack che fa finta di aver dato -idalla riga di comando.


Il mio .bash_profile e .profile hanno righe di codice simili. Vedi la mia domanda aggiornata.
gsingh2011

Mi scusi, @Rich Homolka, ma vorrei sapere perché dici che -inon è necessario. Grazie.
Sopalajo de Arrierez,

@SopalajodeArrierez se hai una shell interattiva (non uno script, ma attiva su un terminale), bash finge di averlo dato -idalla riga di comando. Prova ad aprire una finestra di shell bash, quindi echo $-, dovresti vedere i(probabilmente tra le altre bandiere)
Rich Homolka

1

Ho avuto lo stesso comportamento, probabilmente dopo aver installato git (Windows).

Nell'impostazione di sistema ho trovato la variabile utente HOME = C: \ Users \ me e reimpostata su HOME = D: \ home

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.