Cygwin .bashrc ist keine Quelle, da Cygwin in Windows Home startet

9

HINWEIS: Eine Aktualisierung des Problems finden Sie in meiner zweiten Bearbeitung unten.

Cygwin hat bis letzte Woche gut für mich gearbeitet. Jetzt wird .bashrc nicht mehr beschafft. Ich muss etwas installiert oder geändert haben, kann mich aber nicht genau erinnern, was das Problem verursacht hat. Wenn ich Cygwin starte, bin ich in meinem Windows-Heim und keiner meiner Aliase funktioniert. Ich muss .bashrc manuell beschaffen. Das Folgende ist meine Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Irgendwelche Ideen?

BEARBEITEN: Mein .bash_profile enthält Folgendes:

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

EDIT2: WICHTIG! Wenn ich Cygwin gestartet habe, wird es in meinem Windows-Startordner gestartet. Ich habe versucht, mein .bash_profile und .bashrc in diesen Ordner zu legen, und sie wurden korrekt bezogen! Dies bedeutet, dass das Problem darauf reduziert wurde, herauszufinden, warum Cygwin im Windows-Basisordner und nicht im normalen Cygwin-Basisordner gestartet wird.

EDIT3: Ergebnisse der Ausführung von 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
quelle
Was wird echo $HOMEgedruckt, wenn Ihre Bash-Shell gestartet wird (und Sie in Ihr Windows-Ausgangsverzeichnis versetzt) ?
Keith Thompson
Es gibt mein Windows-Zuhause wieder, nicht mein Cygwin-Zuhause.
gsingh2011
Aber mit Cygwin-Syntax, richtig? ( /cygdrive/c/Users/fooanstatt C:\Users\foo)
Keith Thompson
Ja, mit Cygwin-Syntax.
gsingh2011
Was passiert, wenn Sie HOME=/home/yourname bash -lan der Terminal-Eingabeaufforderung eingeben? Wenn ich recht habe, sollte dies Ihnen eine ordnungsgemäß funktionierende Shell geben. Beachten Sie, dass dies eine Diagnose oder bestenfalls eine Problemumgehung ist, keine Lösung. Wir müssen noch herausfinden, warum Ihre überhaupt $HOMEfalsch ist. Das Grundproblem ist die falsche Einstellung von $HOME; Bash verhält sich richtig.
Keith Thompson

Antworten:

9

In den Cygwin-FAQ wird erklärt, wie $HOMEeingestellt wird:

Beim Starten von Cygwin unter Windows HOMEwird Folgendes in absteigender Reihenfolge der Priorität festgelegt:

  • HOME aus der Windows-Umgebung, übersetzt in das POSIX-Formular.
  • Der Eintrag in /etc/passwd
  • /home/USERNAME

Bei Verwendung von Cygwin aus dem Netzwerk (Telnet, SSH, ...) HOMEwird von eingestellt /etc/passwd.

Wenn Ihr HOMEauf einen Wert wie festgelegt ist /cygdrive/c, ist es wahrscheinlich, dass er in Windows festgelegt wurde. Starten Sie ein DOS-Befehlsfenster und geben Sie ein set HOME, um zu überprüfen, ob dies der Fall ist.

Der Zugriff auf freigegebene Laufwerke ist häufig eingeschränkt, wenn Sie vom Netzwerk aus starten. Daher möchten Domänenbenutzer möglicherweise HOMEin der Windows-Umgebung (auf freigegebenen Laufwerken) eine andere als in /etc/passwd(auf lokalen Laufwerken). Beachten Sie, dass ssh nur berücksichtigt /etc/passwd, ohne es zu beachten HOME.

Ich gehe davon aus, dass Sie Ihre /etc/passwdDatei durcheinander gebracht haben . (Das Windows-Ausgangsverzeichnis ist %USERPROFILE%nicht %HOME%.)

Was bedeutet grep USERNAME /etc/passwdDrucken (durch USERNAMEIhren Benutzernamen ersetzen )?

Keith Thompson
quelle
Ich habe die Ausgabe zu meiner Frage hinzugefügt, damit sie leichter zu lesen ist. Es sieht so aus, als ob es dort richtig eingestellt ist. Ich habe jedoch meine Windows-Umgebungsvariablen geöffnet, um festzustellen, ob eine% HOME% -Variable vorhanden war und auf% USERPATH% festgelegt wurde. Ich habe es entfernt, aber es hat mein Problem nicht gelöst. Vielleicht muss es neu gestartet werden?
gsingh2011
1
Haben Sie es aus der Systemsteuerung oder aus einer Windows-Befehlsshell mit entfernt set HOME=? Die Verwendung des Systembedienfelds funktioniert eher, aber selbst dann ist möglicherweise ein Neustart erforderlich.
Keith Thompson
Ich entfernte es, indem ich im Startmenü mit der rechten Maustaste auf Computer klickte, auf Eigenschaften klickte, auf erweiterte Systemeinstellungen klickte, dann auf Umgebungsvariablen und dann HOME entfernte. Ein Neustart war notwendig. Jetzt lädt Cygwin das richtige Home-Verzeichnis. Danke für die Hilfe.
gsingh2011
1

Wenn Sie ein .profile oder .bash_profile haben, wird dieses auf Login-Shells bezogen, und Sie erhalten seit dem Bestehen eine Login-Shell --login. Wenn Sie .profile als Quelle verwenden, gibt bash .bashrc nicht als Quelle.

Ich würde versuchen zu sagen:

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

Überprüfen Sie in Ihrem .profile, ob dies hilfreich ist. Ihre .bashrc sollte weiterhin wie gewohnt in anderen Nicht-Login-Shell-Aufrufen bezogen werden.

Und geh nicht -izu Bash über; du brauchst es nicht Bash Art von Hacks, die so tun, als hätten Sie -iauf der Kommandozeile gegeben.

Reiche Homolka
quelle
Mein .bash_profile und .profile haben ähnliche Codezeilen. Siehe meine aktualisierte Frage.
gsingh2011
Entschuldigung, @Rich Homolka, aber ich würde gerne wissen, warum Sie sagen, dass -idas nicht notwendig ist. Vielen Dank.
Sopalajo de Arrierez
@SopalajodeArrierez Wenn Sie eine interaktive Shell (kein Skript, aber an einem Terminal aktiv) haben, gibt bash vor, Sie hätten sie -iin der Befehlszeile angegeben. Versuchen Sie, ein Bash-Shell-Fenster zu öffnen, dann echo $-sollten Sie i(unter anderem Flaggen) sehen
Rich Homolka
1

Ich habe das gleiche Verhalten erlebt - wahrscheinlich nachdem git (Windows) installiert wurde.

In der Systemeinstellung habe ich die Benutzervariable HOME = C: \ Users \ me gefunden und auf HOME = D: \ home zurückgesetzt

user377223
quelle