Bash không tải '.profile' trong phiên mới trên Linux


22

Tôi đang thiết lập một máy Linux mới mà tôi nhận được từ phòng CNTT của chúng tôi và nhận thấy .profilekhông được tải khi tôi bắt đầu phiên cuối mới. Shell hiện tại là Bash , mặc dù tôi đã thay đổi nó từ sh mặc định đi kèm. Làm thế nào để tôi tải nó .profilekhi khởi động?

Tôi truy cập shell thông qua SSH : ssh myusername@remotemachine. Tôi có quyền quản trị viên trên đó.


Cho chúng tôi thấy lệnh bạn sử dụng để bắt đầu shell của bạn.
Nifle

Câu trả lời:


24

Khi Bash bắt đầu như một vỏ đăng nhập tương tác, một trong những tệp mà nó có thể xử lý là ~/.profile.

Khi nó bắt đầu như một vỏ không đăng nhập tương tác thì không. Nó xử lý /etc/bash.bashrc(nếu tệp đó hoặc tệp tương tự được bật trong phiên bản Bash của bạn) và ~/.bashrc.

Bạn có thể thêm các mục sau vào ~/.bashrc(nhưng hãy cẩn thận với các vòng lặp hoặc giá trị bị thay đổi vô tình):

. $HOME/.profile

8
Nếu bạn sẽ có .bashrc nguồn .profile của bạn (mà tôi không khuyến nghị), bạn nên có một số biện pháp chống lại việc tìm nguồn cung ứng kép. Đặt một số biến bảo vệ hoặc hơn [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka

2
Vâng, tôi cũng không thực sự khuyên bạn nên nó.
Tạm dừng cho đến khi có thông báo mới.

12
Một shell đăng nhập sẽ thử ~ / .bash_profile, ~ / .bash_login và ~ / .profile theo thứ tự và chỉ mở cái đầu tiên mà nó tìm thấy.
Beano

3
Như những người khác đã nói, điều này KHÔNG được khuyến khích, vì cách thông thường là dành cho hồ sơ và "bạn bè" (.bash_profile) để nguồn .bashrc chứ không phải theo cách khác. Có thể là chương trình thiết bị đầu cuối của bạn KHÔNG phải là vỏ đăng nhập, mà là vỏ không đăng nhập tương tác. Thường thì có một tùy chọn bạn có thể đặt - biến nó thành một vỏ đăng nhập để có được .profile, .login và / hoặc .bash_profile để thực thi.
du lịch

15

Nó phụ thuộc vào cách bạn bắt đầu vỏ của bạn. Như những người khác đã nói, một vỏ đăng nhập sẽ tải hồ sơ của bạn (nó sẽ tìm kiếm .bash_profile trước, sau đó sẽ thử .profile). Nếu nó tìm thấy một trong những thứ này, nó sẽ tải chúng. Một vỏ không đăng nhập (tương tác hoặc không tương tác) sẽ tạo nguồn .bashrc.

Tôi khuyên bạn nên đặt mọi thứ vào .bashrc. Sự phân tách .profile / .bashrc là loại tùy ý và có ý nghĩa hơn trong những ngày xưa của UNIX khi tty không chỉ là một tên thiết bị và có nghĩa là một TeleType thực sự. Nó có nghĩa là để bắt đầu một số thứ nhất định (như kiểm tra thư) khi đăng nhập 'chính' vào máy chủ và chỉ là công cụ thiết lập bình thường cho các shell khác. Trong hầu hết các Linux bạn sẽ đăng nhập ngay bây giờ, bạn không thực sự đăng nhập vào shell, vì bạn đang đăng nhập vào một số giao diện đồ họa (KDE, gnome, CDE 'shudder'). "Các quy trình đăng nhập sinh sản" hiện được quản lý phiên của bạn quan tâm. Bây giờ nó ít liên quan hơn.

Đề xuất của tôi: Làm cho .profile của bạn chỉ bao gồm:

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

là dòng đầu tiên của .bashrc, bảo vệ chống lại những thứ kỳ lạ xảy ra khi chạy tập lệnh bash bằng cách nhảy ra sớm:

[[ $- != *i* ]] && return

5
.profilenên được giữ bash bất khả tri. Tôi đề nghị cấu hình .bash_profileđể tải .profilevà sau đó tải .bashrc. chỉ đưa bash bất khả tri vào .profile, thích PATHvà những LC_*thứ. Đặt phần còn lại vào .bashrc.
lesmana

@Rich Homolka Tại sao [-f $ HOME / .bashrc] hai lần trong lệnh của bạn? Lệnh bạn đã đăng khác với chỉ như thế nào '. $ HOME / .bashrc '?
David Doria

1
Protip: Đừng đặt bất cứ thứ gì vào .bashrc của bạn ghi vào thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn, vì điều đó có thể phá vỡ các máy khách không tương tác cho những thứ như SCP. Những thứ có đầu ra (ví dụ: tôi muốn được chào đón bằng một chiếc bánh quy may mắn và thời gian hoạt động) chỉ nên đi vào .profile / .bash_profile
Brian A. Henning

@Lotharyx đúng. Chúng tôi đã có một kshrc tiêu chuẩn xuất khẩu sang thiết bị xuất chuẩn, đã phá vỡ Xserver (vượt quá chim ruồi)
Rich Homolka
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.