bashrc hay bash_profile?


49

Tôi biết sự khác biệt giữa hai tập lệnh đăng nhập bash:

.bashrc chỉ được chạy bởi các shell "không đăng nhập".

.bash_profile(hoặc .bash_loginhoặc .profile) được thực thi bởi trình bao "đăng nhập".

Có ai có một số ví dụ hay về những thứ phù hợp hơn cho việc thực hiện chỉ đăng nhập, như vậy tôi chỉ đưa chúng vào .bash_profile, nhưng chúng sẽ không thực sự có ý nghĩa .bashrc?

(Tôi biết hầu hết chúng ta nguồn .bashrcra khỏi .bash_profile, do đó dường như không có nhiều điểm trong câu hỏi ngược lại ...)


Câu trả lời:


24

Vì a .bashrclà dành cho shell không đăng nhập, tôi tránh mọi lệnh xuất hiện trên màn hình. Tôi cũng đã gặp phải những trải nghiệm trong đó các câu lệnh echo .bashrcsẽ khiến các lệnh sftp và rsync không thành công (và có thể cả các lệnh scp nữa).

# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime

Ngoài ra, bạn thường sẽ không chạy ssh-agent từ trình bao không tương tác. Vì vậy, tôi có điều này trong .bash_profile.

if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi

2
Nếu bạn sử dụng ~ / .profile thay vì ~ / .bash_profile, mọi thứ vẫn sẽ hoạt động ngay cả khi bạn thay đổi shell .. ~ / .bash_profile dành cho những thứ cụ thể bash.
LassePoulsen

1
Nhưng bash sẽ chỉ chạy EITHER .bash_profile OR .profile, vì vậy nếu bạn sẽ sử dụng cả hai, bạn cần nguồn .profile từ bên trong .bash_profile hoặc một cái gì đó. Đó thực sự không phải là một ý tưởng tồi ...
Don Faulkner

@Source & @Don: Điểm tốt. Tôi đã từng có Bashism trong .bash_profile của mình, nhưng bây giờ tôi đã chuyển sang một thứ phổ quát hơn. Có lẽ sử dụng .profile theo thứ tự.
Stefan Lasiewski

Về các lệnh tạo đầu ra trong việc .bashrccan thiệp vào các phương thức truyền tệp từ xa được thực hiện thông qua các luồng tiêu chuẩn , giải pháp là đặt các lệnh đó dưới mã để kiểm tra xem shell có tương tác hay không và chỉ tiếp tục nếu có. Các .bashrctệp mặc định của người dùng trong Ubuntu, được sao chép từ /etc/skel/.bashrckhi tạo tài khoản, cũng như toàn hệ thống /etc/bash.bashrc, đã chứa mã kiểm tra và trả về nếu hệ vỏ không tương tác (mặc dù người ta vẫn phải đặt các lệnh tạo đầu ra theo chúng).
Eliah Kagan

8

Byobu là một ví dụ tuyệt vời về thứ mà bạn không bao giờ nên đặt vào .bashrc.

Mặt khác, nó sẽ tự chạy đệ quy trong mỗi một trong số các 'thiết bị ảo' của nó ;-)

Bạn có thể thử nó mặc dù, đó là loại vui vẻ.

Đó là lý do tại sao bạn đặt nó vào .profile, vì vậy byobu (thực sự chỉ là một trình bao bọc xung quanh màn hình) chỉ được tải, một lần, tại thời điểm đăng nhập. Và byobu có thể bắt đầu các phiên bash tương tác mới.


Đó là một ví dụ tốt. Cảm ơn con trỏ đến Byobu là tốt. Bây giờ để đi thử nó.
Don Faulkner
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.