.bashrc khi đăng nhập ssh


374

Khi tôi ssh vào hộp ubfox chạy Hardy 8.04, các biến môi trường trong tôi .bashrckhông được đặt.

Nếu tôi làm một nguồn .bashrc, các biến được đặt đúng, và tất cả đều tốt.

Tại sao .bashrckhông chạy khi đăng nhập?


92
Làm thế nào trên trái đất này là "lạc đề"?
Giô-na

8
Tôi không nghiêm khắc như thế này, nhưng tôi đoán là cái này thuộc về serverfault.com, superuser.com hoặc Askubfox.com
Michael Butler

16
@MichaelButler Đồng ý. Tự hỏi tại sao họ không di chuyển nó thay vì chỉ đóng nó xuống ...
Luc

4
@Luc - Câu hỏi chỉ có thể được di chuyển trong vòng 60 ngày kể từ khi được tạo. Câu hỏi này đã không được đóng ngoài chủ đề cho đến 3 năm rưỡi sau khi nó được tạo ra. Tôi tin rằng quy tắc 60 ngày có liên quan khi cơ sở dữ liệu câu hỏi được sao lưu hoặc một cái gì đó ... việc di chuyển trở nên khó khăn hơn sau khi sao lưu đó xảy ra.
ArtOfWarfare

Tôi nghĩ rằng đó là một câu hỏi khá hữu ích. Đã gặp phải vấn đề này khi tôi phải ssh vào máy A, để ssh vào máy B (chỉ có thể truy cập qua mạng cục bộ của A). Dạy tôi một sự khác biệt thực tế giữa .bashrc.bash_profile!
information_interchange

Câu trả lời:


620

.bashrckhông có nguồn gốc khi bạn đăng nhập bằng SSH. Bạn cần nguồn nó .bash_profilenhư thế này:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

32
điều này sẽ hoạt động trên bất kỳ bản phân phối lành mạnh nào với Bash, do đó tất cả các nhận xét này đã lỗi thời :)

1
Điều này không cần thiết với máy chủ Ubuntu 12.04 LTS, vì .bashrccó nguồn gốc khi bạn SSH vào, theo mặc định.
orokusaki

4
@orokusaki: Chính xác, đó là :) Có một tệp .bash_profile giả mạo đã buộc .profile bị bỏ qua.
Lester Peabody

4
Giống như @LesterPeabody, .bashrc của tôi không có nguồn gốc trên máy chủ Ubuntu 12.04 LTS vì một .bash_profile giả mạo. Nó được tạo ra bởi cài đặt RVM. Tôi đã chuyển lệnh RVM sang .profile và xóa .bash_profile. Tất cả chạy tốt bây giờ.
Rod Daunoravicius

4
fwiw Debian Jessie / 8 đã nguồn .bashrcout-of-the-box - nhưng nó có phải nó từ .profile, không .bash_profile.
gạch dưới

75

Tôi đã có tình huống tương tự như Hobhouse. Tôi muốn sử dụng lệnh

 ssh myhost.com 'some_command'

và 'some_command' tồn tại trong '/ var / some_location' vì vậy tôi đã cố gắng thêm '/ var / some_location' trong môi trường PATH bằng cách chỉnh sửa '$ HOME / .bashrc'

nhưng điều đó đã không làm việc. bởi vì .bashrc (Ubuntu 10.4 LTS) mặc định ngăn không tìm nguồn cung ứng theo mã như bên dưới

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Vì vậy, nếu bạn muốn thay đổi môi trường cho ssh không đăng nhập shell. bạn nên thêm mã ở trên dòng đó.


7
Cảm ơn bạn đời! Đây là bit không hoạt động với tôi :)
Raymond Barlow

Đầu mát sương. Tôi đã gặp phải cái bẫy này khi chạy các kịch bản từ jenkins. Tôi đã đăng nhập qua ssh và nó hoạt động. Jenkins đăng nhập không tương tác và nó đã thất bại.
Krzysztof Jabłoński

1
Tại sao giải pháp chung là thậm chí không đặt đường dẫn mới cho các vỏ không tương tác nằm ngoài tôi. Nên có một chút ở trên rằng nếu tuyên bố, chỉ vì lý do này. Có vẻ như chỉ có các bí danh và việc khởi tạo các công cụ tương tác nên nằm dưới dòng đó ...
BenPen

2
Trên phiên bản Ubuntu khác, kiểm tra tương tác trông giống như:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain

Cảm ơn, điều này đã giải quyết nó cho tôi. Ước gì tôi thấy điều này khoảng một giờ trước!
Justin Lawrence

31

Để có một tài nguyên tuyệt vời về cách hoạt động của bash invocation, dotfiles sẽ làm gì và cách bạn nên sử dụng / cấu hình chúng, hãy đọc điều này:


Đoạn văn chính: "khiến nó đọc / etc / profile và sau đó là một trong .bash_profile hoặc .bash_login hoặc .profile."
Andy Hayden

29

Nếu giải pháp của ayman không hoạt động, hãy thử đặt tên tệp của bạn .profilethay vì .bash_profile. Điều đó làm việc cho tôi.


2
Tuyệt vời. Tôi đã mất 15 phút về chi tiết này.
vmassuchetto

Điều này đã thực hiện thủ thuật trên Ubuntu 12.10
ThinkCode

1
Tôi nghĩ .profile tải khi đăng nhập GUI. .bash_profile để đăng nhập thiết bị đầu cuối.
Razec Luar

Điều này cũng hoạt động để đăng nhập SSH vào bộ chứa docker Debian Debian (sử dụng bộ chứa dữ liệu duy nhất để lưu trữ liên tục) - NHƯNG bạn cũng có thể muốn kiểm tra / etc / passwd để kiểm tra vỏ đăng nhập của bạn là / bin / bash & not / bin / sh -------> / bin / dash
Stuart Cardall 15/05/2015

1
@RazecLuar .profilesẽ được thực thi bởi bất kỳ shell đăng nhập nào , bất kể shell đã nói có ý định sinh ra GUI hay không. Nhận xét của bạn hoàn toàn mâu thuẫn với câu hỏi và câu trả lời này, trong đó chỉ rõ rằng.profile được gọi trên SSHing - một phương pháp không phải là GUI rõ ràng.
gạch dưới
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.