Tôi nhận thấy rằng khi tôi chạy một lệnh trực tiếp trên máy chủ SSH bằng ssh <host> <command>
cú pháp, tôi thấy đầu ra của .bashrc
nhưng không phải là đầu ra của .bash_profile
(hoặc .profile
).
Chẳng hạn, nếu tôi đặt lệnh sau ở đầu cả hai tệp,
echo ${BASH_SOURCE[0]}
và nguồn thủ công .bash_profile
(nguồn nào .bashrc
lần lượt), tôi sẽ thấy
$ . .bash_profile
.bash_profile
.bashrc
Đây là cùng một đầu ra tôi thấy nếu tôi đăng nhập vào máy tính này từ xa thông qua SSH, sử dụng ssh <host>
hình thức của lệnh. (Và nếu tôi .bash_profile
tạm thời cất giấu ở một nơi khác, cả hai dòng này sẽ không bị lặp lại.)
Tuy nhiên, nếu tôi thực thi một lệnh trực tiếp trên máy từ xa với ssh <host> <command>
hình thức ssh
, thì đầu ra trông như thế này:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Sự hiểu biết của tôi là sự khác biệt giữa .bash_profile
và .bashrc
cái trước là cho shell đăng nhập trong khi cái sau là cho shell tương tác, không đăng nhập .
Tôi đã kết luận như sau:
ssh <host>
chỉ nguồn.bash_profile
, trong khissh <host> <command>
chỉ nguồn.bashrc
, có nghĩa là- cái trước là shell đăng nhập và cái sau thì không.
Những kết luận này có đúng không? Tại sao được ssh <host> <command>
coi là một vỏ tương tác, không đăng nhập? Không phải SSH vẫn đăng nhập vào máy từ xa để thực thi lệnh sao?
.bashrc
đó đã đưa ra một lỗi, trong khi các dòng tương tự .bash_profile
thì không. Tôi đã nhân cơ hội để điều tra sự khác biệt trước khi sửa các dòng vi phạm.
.bashrc
? Tập tin đó không được phép tạo ra bất kỳ đầu ra nào. Bất kỳ đầu ra từ.bashrc
có thể phá vỡ tất cả các công cụ sử dụng ssh như vận chuyển của họ.