Cygwin .bashrc tidak menjadi sumber karena cygwin mulai di Windows home

9

CATATAN: Silakan lihat edit kedua saya di bawah ini untuk pembaruan tentang masalah tersebut.

Cygwin bekerja dengan baik untuk saya sampai minggu lalu. Sekarang .bashrc tidak didapatkan. Saya harus menginstal sesuatu atau mengubah sesuatu tetapi saya tidak ingat persis apa yang menyebabkan masalah. Ketika saya memulai Cygwin, saya di rumah Windows saya dan tidak ada alias saya yang berfungsi. Saya harus secara manual sumber .bashrc. Berikut ini adalah Cygwin.bat saya:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Ada ide?

EDIT: .bash_profile saya berisi yang berikut,

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

EDIT2: PENTING! Ketika saya memulai Cygwin dimulai di folder home Windows saya. Saya mencoba meletakkan .bash_profile dan .bashrc saya di folder ini dan mereka bersumber dengan benar! Ini berarti bahwa masalahnya telah dikurangi untuk mencari tahu mengapa Cygwin mulai di folder home Windows dan bukan folder home Cygwin yang normal.

EDIT3: Hasil menjalankan 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
sumber
Ketika bash shell Anda mulai (dan menempatkan Anda di direktori home Windows Anda), apa yang echo $HOMEdicetak?
Keith Thompson
Ini menggemakan rumah Windows saya, bukan rumah Cygwin saya.
gsingh2011
Tetapi menggunakan sintaksis Cygwin, kan? ( /cygdrive/c/Users/foodaripada C:\Users\foo)
Keith Thompson
Ya, menggunakan sintaksis Cygwin.
gsingh2011
Apa yang terjadi ketika Anda mengetik HOME=/home/yourname bash -ldi terminal prompt? Jika saya benar, ini seharusnya memberi Anda shell yang berfungsi dengan baik. Perhatikan bahwa ini adalah diagnostik, atau paling tidak solusi, bukan solusi; kami masih perlu mencari tahu mengapa Anda $HOMEsalah sejak awal. Masalah root adalah pengaturan salah $HOME; bash berperilaku dengan benar.
Keith Thompson

Jawaban:

9

The Cygwin FAQ menjelaskan bagaimana $HOMEdiatur:

Saat memulai Cygwin dari Windows, HOMEditentukan sebagai berikut dalam urutan prioritas menurun:

  • HOME dari lingkungan Windows, diterjemahkan ke formulir POSIX.
  • Entri masuk /etc/passwd
  • /home/USERNAME

Saat menggunakan Cygwin dari jaringan (telnet, ssh, ...), HOMEdiatur dari /etc/passwd.

Jika Anda HOMEdisetel ke nilai seperti /cygdrive/citu, kemungkinan itu disetel pada Windows. Mulai Window Perintah DOS dan ketik set HOMEuntuk memverifikasi apakah ini masalahnya.

Akses ke drive bersama sering dibatasi ketika memulai dari jaringan, sehingga pengguna Domain mungkin ingin memiliki yang berbeda HOMEdi lingkungan Windows (pada drive bersama) daripada di /etc/passwd(pada drive lokal). Perhatikan bahwa ssh hanya mempertimbangkan /etc/passwd, mengabaikan HOME.

Tebakan terbaik saya adalah Anda telah mengacaukan /etc/passwdfile Anda . (Direktori home Windows %USERPROFILE%tidak %HOME%.)

Apa yang grep USERNAME /etc/passwddicetak (diganti USERNAMEdengan nama pengguna Anda)?

Keith Thompson
sumber
Saya telah menambahkan output ke pertanyaan saya sehingga lebih mudah dibaca. Sepertinya sudah diatur dengan benar di sana. Namun, saya membuka variabel Lingkungan Windows saya untuk melihat apakah ada variabel% HOME% dan ada dan itu disetel ke% USERPATH%. Saya menghapusnya, tetapi itu tidak menyelesaikan masalah saya. Mungkin perlu restart?
gsingh2011
1
Apakah Anda menghapusnya dari panel kontrol System, atau dari perintah shell Windows menggunakan set HOME=? Menggunakan panel kontrol Sistem lebih mungkin untuk bekerja, tetapi restart mungkin diperlukan bahkan saat itu.
Keith Thompson
Saya menghapusnya dengan mengklik kanan pada Komputer di menu mulai, mengklik properti, mengklik pengaturan sistem lanjutan, lalu variabel lingkungan, dan kemudian menghapus HOME. Restart diperlukan. Sekarang Cygwin memuat direktori home yang tepat. Terima kasih untuk bantuannya.
gsingh2011
1

Jika Anda memiliki .profile atau .bash_profile, itu bersumber pada shell login, dan Anda mendapatkan shell login sejak Anda lulus --login. Jika Anda sumber .profile, maka bash tidak akan sumber .bashrc.

Saya akan mencoba untuk menempatkan:

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

di profil Anda, lihat apakah itu membantu. .Bashrc Anda masih harus bersumber, seperti biasa, dalam permintaan shell non-login lainnya.

Dan jangan -isampai bash; kamu tidak membutuhkannya. Bash jenis hack yang ada, berpura-puralah Anda berikan -ipada baris perintah.

Homolka yang kaya
sumber
.Bash_profile dan .profile saya memiliki baris kode yang serupa. Lihat pertanyaan saya yang diperbarui.
gsingh2011
Maaf, @Rich Homolka, tapi saya ingin tahu mengapa Anda mengatakan itu -itidak perlu. Terima kasih.
Sopalajo de Arrierez
@SopalajodeArrierez jika Anda memiliki shell interaktif (bukan skrip, tetapi aktif di terminal), bash berpura-pura Anda memberikannya -ipada baris perintah. Cobalah membuka jendela bash shell, maka echo $-, Anda akan melihat i(di antara kemungkinan bendera lainnya)
Rich Homolka
1

Saya mengalami perilaku yang sama - mungkin setelah git (Windows) diinstal.

Dalam pengaturan sistem saya telah menemukan variabel pengguna HOME = C: \ Users \ me dan mengatur ulang ini ke HOME = D: \ home

pengguna377223
sumber