Cygwin .bashrc nie jest źródłem, ponieważ cygwin zaczyna się w systemie Windows

9

UWAGA: Proszę zobaczyć moją drugą edycję poniżej, aby uzyskać aktualizację problemu.

Cygwin pracował dla mnie dobrze do zeszłego tygodnia. Teraz .bashrc nie jest pozyskiwany. Musiałem coś zainstalować lub coś zmienić, ale nie pamiętam dokładnie, co spowodowało problem. Kiedy uruchamiam Cygwin, jestem w domu Windows i żaden z moich aliasów nie działa. Muszę ręcznie pobrać .bashrc. Oto mój Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Jakieś pomysły?

EDYCJA: Mój plik .bash_profile zawiera następujące elementy,

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

EDYCJA 2: WAŻNE! Kiedy uruchomiłem Cygwin, zaczyna się on w moim katalogu domowym Windows. Próbowałem umieścić mój .bash_profile i .bashrc w tym folderze i zostały one pozyskane poprawnie! Oznacza to, że problem został zredukowany do wyjaśnienia, dlaczego Cygwin uruchamia się w folderze domowym systemu Windows, a nie w zwykłym folderze domowym Cygwin.

EDYCJA 3: Wyniki działania 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
źródło
Kiedy zaczyna się twoja powłoka bash (i umieszcza cię w katalogu domowym Windows), co echo $HOMEdrukuje?
Keith Thompson
Odzwierciedla mój dom Windows, a nie dom Cygwin.
gsingh2011
Ale używając składni Cygwin, prawda? ( /cygdrive/c/Users/foozamiast C:\Users\foo)
Keith Thompson
Tak, używając składni Cygwin.
gsingh2011
Co się stanie, gdy wpiszesz HOME=/home/yourname bash -lmonit w terminalu? Jeśli mam rację, powinno to dać ci poprawnie działającą powłokę. Zauważ, że jest to diagnostyczne lub w najlepszym razie obejście, a nie rozwiązanie; musimy $HOMEprzede wszystkim dowiedzieć się, dlaczego twój błąd jest nieprawidłowy. Podstawowym problemem jest nieprawidłowe ustawienie $HOME; bash zachowuje się poprawnie.
Keith Thompson

Odpowiedzi:

9

Cygwin FAQ wyjaśnia, jak $HOMEjest ustawiony:

Podczas uruchamiania Cygwin z systemu Windows HOMEokreśla się w następujący sposób w kolejności malejącego priorytetu:

  • HOME ze środowiska Windows, przetłumaczone na formularz POSIX.
  • Wpis w /etc/passwd
  • /home/USERNAME

Podczas korzystania z Cygwin z sieci (telnet, ssh, ...), HOMEustawiany jest od /etc/passwd.

Jeśli HOMEustawisz taką wartość, jak /cygdrive/c, prawdopodobnie ustawiono ją w systemie Windows. Uruchom okno poleceń DOS i wpisz, set HOMEaby sprawdzić, czy tak jest.

Dostęp do dysków udostępnionych jest często ograniczony podczas uruchamiania z sieci, dlatego użytkownicy domeny mogą chcieć mieć inne ustawienia HOMEw środowisku Windows (na dysku udostępnionym) niż w /etc/passwd(na dysku lokalnym). Zauważ, że ssh bierze pod uwagę tylko /etc/passwdlekceważenie HOME.

Domyślam się, że popsułeś /etc/passwdplik. (Katalog główny systemu Windows %USERPROFILE%nie jest %HOME%.)

Co grep USERNAME /etc/passwddrukuje (zastępując USERNAMEswoją nazwę użytkownika)?

Keith Thompson
źródło
Dodałem wynik do mojego pytania, aby łatwiej było go czytać. Wygląda na to, że jest tam poprawnie ustawiony. Jednak otworzyłem moje zmienne środowiskowe systemu Windows, aby zobaczyć, czy istnieje zmienna% HOME%, a tam była i została ustawiona na% USERPATH%. Usunąłem go, ale to nie rozwiązało mojego problemu. Może potrzebuje ponownego uruchomienia?
gsingh2011
1
Czy usunąłeś go z panelu sterowania systemu lub z powłoki poleceń systemu Windows za pomocą set HOME=? Korzystanie z panelu sterowania systemu jest bardziej prawdopodobne, ale nawet wtedy może być konieczne ponowne uruchomienie.
Keith Thompson
Usunąłem go, klikając prawym przyciskiem myszy Komputer w menu Start, klikając właściwości, klikając zaawansowane ustawienia systemu, a następnie zmienne środowiskowe, a następnie usuwając program HOME. Ponowne uruchomienie było konieczne. Teraz Cygwin ładuje odpowiedni katalog domowy. Dzięki za pomoc.
gsingh2011
1

Jeśli masz profil .profile lub .bash_profile, jest on pozyskiwany z powłok logowania, a otrzymujesz powłokę logowania od momentu przejścia --login. Jeśli źródło .profile, bash nie będzie źródła .bashrc.

Spróbowałbym umieścić:

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

w swoim .profile sprawdź, czy to pomoże. Twój .bashrc powinien nadal być pozyskiwany, jak zwykle, w innych wywołaniach powłoki bez logowania.

I nie przechodź -ido bashu; nie potrzebujesz tego. Bash to rodzaj hacków, które udają, że dałeś -iw wierszu poleceń.

Rich Homolka
źródło
Mój .bash_profile i .profile mają podobne linie kodu. Zobacz moje zaktualizowane pytanie.
gsingh2011
Przepraszam, @Rich Homolka, ale chciałbym wiedzieć, dlaczego mówicie, że -ito nie jest konieczne. Dzięki.
Sopalajo de Arrierez
@SopalajodeArrierez, jeśli masz interaktywną (nie skryptową, ale aktywną w terminalu) powłokę, bash udaje, że dałeś ją -iz wiersza poleceń. Spróbuj otworzyć okno powłoki bash, a następnie echo $-powinieneś zobaczyć i(między innymi inne flagi)
Rich Homolka
1

Doświadczyłem tego samego zachowania - prawdopodobnie po zainstalowaniu git (Windows).

W ustawieniach systemu znalazłem zmienną użytkownika HOME = C: \ Users \ me i zresetowałem ją do HOME = D: \ home

użytkownik377223
źródło