Làm thế nào để viết một kịch bản shell được thực thi khi đăng nhập?


16

Tôi đang cố gắng viết tập lệnh bash shell trong bản phân phối Linux Ubuntu 11.10, nó sẽ được thực thi tự động khi đăng nhập vào hệ thống. Nhưng tôi không thể tìm ra rằng những gì để viết trong kịch bản mà nó sẽ tự động được thực hiện khi đăng nhập.

Câu trả lời:


18

Nếu bạn muốn nó là toàn cầu, hãy sửa đổi

 /etc/profile 

hoặc thêm một tập lệnh vào

 /etc/profile.d

Nếu bạn muốn nó là dành riêng cho người dùng, hãy sửa đổi

 /home/$USER/.profile

1
Đừng quên rằng tiện ích mở rộng sẽ là .shnếu bạn đặt tập lệnh của mình vào trong /etc/profile.d/. chmode +x /etc/profile.d/myscript.shtất nhiên rồi
Brian Haak

Raspbian Căng. Đang cố gắng chạy /usr/local/bin/pihole -clệnh trên autologin của người dùng cụ thể. Đã thêm dòng này vào /home/$USER/.profile- không có gì xảy ra. Khi tôi thêm tập lệnh vào /etc/profile.dthì nó hoạt động, nhưng nó toàn cầu và chạy nó ngay cả khi tôi mở phiên ssh (đó không phải là điều tôi muốn). Thêm vào .bashrchoạt động quá, nhưng chạy bất cứ khi nào tôi mở shell mới (đó không phải là điều tôi muốn). Câu hỏi: Tại sao thêm vào /home/$USER/.profilesẽ không hoạt động ???
Drew

3

Chỉ cần thêm tập lệnh bash vào các ứng dụng Khởi động.

Trong trường lệnh, nhập

bash /full/path/to/bash/script.sh/

2
Làm thế nào để bạn thêm "bash /.../script.sh" vào các ứng dụng Khởi động từ dòng lệnh?
aleb

1
OP không bao giờ đề cập đến GUI; Điều gì xảy ra nếu họ ở trên một máy chủ từ xa thông qua SSH và không GUI? Không có thẻ máy tính để bàn nào được áp dụng cho câu hỏi ...
Doktor J

Tiêu đề đề cập cụ thể khi đăng nhập và không có gì về GUI máy tính để bàn.
RichieHH

0

Nếu bạn muốn cụ thể hơn bash, bạn cũng có thể viết mã cho bạn trong ~ / .bash_profile hoặc ~ / .bash_login.

Và bạn có thể lấy bất kỳ tập lệnh nào trong đó, ví dụ:

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

0

/etc/profilehoặc $HOME/.profilehoặc$HOME/.bash_profile

Tôi rất khuyến khích không sử dụng /etc/profile.d/yourscript.shnếu nó tạo ra đầu ra. Khi bạn sử dụng một phiên không tương tác, bạn sẽ nhận được một $TERM is not settin nhắn. Điều này là đáng chú ý khi sử dụng giao thức ssh, như scp. Thường thì không phải là vấn đề lớn, tuy nhiên, Veeam không thích nó và sẽ đưa ra cảnh báo. Tôi biết Veeam không phải là chủ đề ở đây, nhưng điều đáng nói là không phải tất cả các ứng dụng sẽ duyên dáng bỏ qua $TERM is not setcảnh báo.

Nói tóm lại, nếu tập lệnh tạo đầu ra, hãy đặt nó vào các vị trí được chỉ định trên dòng đầu tiên. Tuy nhiên, nếu bạn đang sửa đổi môi trường và tập lệnh của bạn không tạo đầu ra, thì hãy sử dụng cái sau.

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.