Cygwin .bashrc không phải là nguồn vì Cygwin bắt đầu trong Windows home


9

LƯU Ý: Vui lòng xem chỉnh sửa thứ hai của tôi dưới đây để cập nhật về vấn đề.

Cygwin đã làm việc tốt cho tôi cho đến tuần trước. Bây giờ .bashrc không nhận được nguồn gốc. Tôi đã phải cài đặt một cái gì đó hoặc thay đổi một cái gì đó nhưng tôi không thể nhớ chính xác những gì gây ra vấn đề. Khi tôi khởi động Cygwin, tôi đang ở nhà Windows và không có bí danh nào hoạt động. Tôi phải tự tìm nguồn .bashrc. Sau đây là Cygwin.bat của tôi:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Có ý kiến ​​gì không?

EDIT: .Bash_profile của tôi chứa các mục sau đây,

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

EDIT2: QUAN TRỌNG! Khi tôi khởi động Cygwin, nó bắt đầu trong thư mục Windows của tôi. Tôi đã thử đặt .bash_profile và .bashrc của mình vào thư mục này và chúng có nguồn gốc chính xác! Điều này có nghĩa là vấn đề đã được giảm xuống để tìm ra lý do tại sao Cygwin bắt đầu trong thư mục nhà Windows chứ không phải thư mục nhà Cygwin bình thường.

EDIT3: Kết quả chạy 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

Khi bash shell của bạn bắt đầu (và đưa bạn vào thư mục Windows của bạn), echo $HOMEin cái gì?
Keith Thompson

Nó lặp lại nhà Windows của tôi, không phải nhà Cygwin của tôi.
gsingh2011

Nhưng sử dụng cú pháp Cygwin, phải không? ( /cygdrive/c/Users/foochứ không phải C:\Users\foo)
Keith Thompson

Có, sử dụng cú pháp Cygwin.
gsingh2011

Điều gì xảy ra khi bạn gõ HOME=/home/yourname bash -ltại dấu nhắc thiết bị đầu cuối? Nếu tôi đúng, điều này sẽ cung cấp cho bạn vỏ hoạt động đúng. Lưu ý rằng đây là một chẩn đoán, hoặc tốt nhất là một cách giải quyết, không phải là một giải pháp; chúng tôi vẫn cần phải tìm ra lý do tại sao bạn $HOMEkhông chính xác ở nơi đầu tiên. Vấn đề gốc là cài đặt không chính xác $HOME; bash đang cư xử chính xác.
Keith Thompson

Câu trả lời:


9

Câu hỏi thường gặp về Cygwin giải thích cách $HOMEthiết lập:

Khi khởi động Cygwin từ Windows, HOMEđược xác định như sau theo thứ tự ưu tiên giảm dần:

  • HOME từ môi trường Windows, được dịch sang dạng POSIX.
  • Các mục trong /etc/passwd
  • /home/USERNAME

Khi sử dụng Cygwin từ mạng (telnet, ssh, ...), HOMEđược đặt từ /etc/passwd.

Nếu HOMEgiá trị của bạn được đặt thành một giá trị như /cygdrive/c, có khả năng nó đã được đặt trong Windows. Bắt đầu một cửa sổ lệnh DOS và gõ set HOMEđể xác minh nếu đây là trường hợp.

Quyền truy cập vào các ổ đĩa được chia sẻ thường bị hạn chế khi bắt đầu từ mạng, do đó người dùng Miền có thể muốn có sự khác biệt HOMEtrong môi trường Windows (trên ổ đĩa chung) so với /etc/passwd(trên ổ đĩa cục bộ). Lưu ý rằng ssh chỉ xem xét /etc/passwd, coi thường HOME.

Tôi đoán tốt nhất là bạn đã làm hỏng /etc/passwdtập tin của bạn . (Thư mục chính của Windows là %USERPROFILE%không %HOME%.)

grep USERNAME /etc/passwdIn gì (thay thế USERNAMEbằng tên người dùng của bạn)?


Tôi đã thêm đầu ra cho câu hỏi của mình để dễ đọc hơn. Có vẻ như nó được đặt chính xác ở đó. Tuy nhiên, tôi đã mở các biến Môi trường Windows của mình để xem liệu có biến% HOME% không và có và nó được đặt thành% USERPATH%. Tôi đã gỡ bỏ nó, nhưng nó không giải quyết được vấn đề của tôi. Có lẽ nó cần khởi động lại?
gsingh2011

1
Bạn đã xóa nó khỏi bảng điều khiển Hệ thống hoặc từ vỏ lệnh Windows bằng cách sử dụng set HOME=? Sử dụng bảng điều khiển Hệ thống có nhiều khả năng hoạt động hơn, nhưng sau đó có thể cần phải khởi động lại.
Keith Thompson

Tôi đã loại bỏ nó bằng cách nhấp chuột phải vào Máy tính trong menu bắt đầu, nhấp vào thuộc tính, nhấp vào cài đặt hệ thống nâng cao, sau đó biến môi trường và sau đó xóa HOME. Một khởi động lại là cần thiết. Bây giờ Cygwin tải thư mục nhà bên phải. Cảm ơn đã giúp đỡ.
gsingh2011

1

Nếu bạn có .profile hoặc .bash_profile, có nguồn gốc từ các vỏ đăng nhập và bạn nhận được một vỏ đăng nhập kể từ khi bạn vượt qua --login. Nếu bạn nguồn .profile, thì bash sẽ không nguồn .bashrc.

Tôi sẽ cố gắng đặt:

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

trong .profile của bạn, xem nếu nó giúp. .Bashrc của bạn vẫn phải có nguồn gốc, như bình thường, trong các yêu cầu shell không đăng nhập khác.

Và đừng vượt qua -iđể bash; bạn không cần nó Bash loại hack mà trong, giả vờ bạn đã đưa ra -idòng lệnh.


.Bash_profile và .profile của tôi có các dòng mã tương tự nhau. Xem câu hỏi cập nhật của tôi.
gsingh2011

Xin lỗi, @Rich Homolka, nhưng tôi muốn biết tại sao bạn nói điều đó -ilà không cần thiết. Cảm ơn.
Sopalajo de Arrierez

@SopalajodeArrierez nếu bạn có trình bao tương tác (không phải tập lệnh, nhưng hoạt động tại thiết bị đầu cuối), bash giả vờ bạn đã đưa nó -itrên dòng lệnh. Hãy thử mở một cửa sổ bash shell, sau đó echo $-, bạn sẽ thấy i(trong số các cờ khác có thể)
Rich Homolka

1

Tôi đã trải nghiệm hành vi tương tự - có lẽ sau khi cài đặt git (Windows).

Trong cài đặt hệ thống, tôi đã tìm thấy biến người dùng HOME = C: \ Users \ me và đặt lại biến này thành HOME = D: \ home

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.