Có một tập tin tương đương với .bashrc 'được đọc bởi tất cả các shell không?


105

~/.bashrc nơi duy nhất để xác định các biến môi trường cụ thể của người dùng, bí danh, sửa đổi cho PATHbiến, v.v.?

Tôi hỏi bởi vì dường như nó ~/.bashrcchỉ là một mình bash, nhưng những cái vỏ khác tồn tại quá

Câu trả lời:


94

Các tập tin $HOME/.profileđược sử dụng bởi một số shell, bao gồm bash, sh, dash, và có thể những người khác.

Từ trang bash man:

Khi bash được gọi như một vỏ đăng nhập tương tác, ... đầu tiên nó sẽ đọc và thực thi các lệnh từ tệp / etc / profile, nếu tệp đó tồn tại. Sau khi đọc tệp đó, nó sẽ tìm ~ / .bash_profile, ~ / .bash_login và ~ / .profile, theo thứ tự đó, đọc và thực thi các lệnh từ lệnh đầu tiên tồn tại và có thể đọc được.

Csh và tcsh rõ ràng không nhìn vào ~/.profilenhưng những cái vỏ đó là cổ xưa.


7
Zsh theo mặc định không đọc .profile. Đó là lý do tại sao tôi xóa câu trả lời trước đó. Zsh chỉ đọc .profile khi nó được gọi bởi một liên kết tượng trưng có tên sh.
fschmitt

10
tcsh vẫn còn phổ biến trong một số môi trường.
Maciej Piechotka

1
fschmitt: cảm ơn đã sửa chữa; đã sửa. Maciej Piechotka: Tôi không nghi ngờ gì đó là sự thật; tuy nhiên cũng có thể (mặc dù phức tạp) để tạo các tập lệnh * RC nhập các tập lệnh RC cụ thể khác dựa trên trình bao mà chúng đang chạy.
msw

1
Để cách này hoạt động, người dùng cần đảm bảo rằng mỗi shell là một vỏ đăng nhập. Ví dụ: trong Gnome Terminal, đi tới Hồ sơ -> Tiêu đề và Lệnh và bật Run command as a login shell. Bạn cũng cần phải loại bỏ ~/.bash_profile, hoặc làm cho nó nguồn ~/.profile.
Mikel

@fschmitt Bạn cũng có thể lấy nguồn $HOME/.profiletừ bên trong Zsh của mình .zshrc. Tôi có xu hướng đặt tất cả những thứ vỏ di động của mình vào .profilevà sau đó tôi có thể chia sẻ nó xung quanh bất kỳ môi trường nào tôi có thể nhảy vào giữa.
Benjamin R

56

~/.profilelà nơi phù hợp với các định nghĩa biến môi trường và cho các chương trình phi đồ họa mà bạn muốn chạy khi bạn đăng nhập (ví dụ ssh-agent, screen -m). Nó được thực thi bởi shell đăng nhập của bạn nếu đó là shell kiểu Bourne (sh, ksh, bash). Zsh chạy ~/.zprofilethay thế, và Csh và tcsh chạy ~/.login.

Nếu bạn đăng nhập dưới trình quản lý hiển thị X (xdm, gdm, kdm, ...), việc ~/.profilechạy có phụ thuộc vào cách trình quản lý hiển thị và có lẽ môi trường máy tính để bàn được phân phối bởi phân phối của bạn. Nếu bạn đăng nhập dưới một phiên tùy chỉnh của người dùng, thì điều đó thường được thực thi ~/.xsession.

~/.bashrclà nơi thích hợp cho các cài đặt dành riêng cho bash, như bí danh, hàm, tùy chọn shell và lời nhắc. Như tên cho thấy, nó là cụ thể cho bash; csh có ~/.cshrc, ksh có ~/.kshrcvà zsh có <trốngroll> ~/.zshrc.

Xem thêm:
Sự khác biệt giữa .bashrc và .bash_profile
Tập tin thiết lập nào sẽ được sử dụng để thiết lập các biến môi trường với bash?
Zsh không nhấn ~ / .profile


Đừng quên zsh cũng có .zloginthêm .zprofilechạy sau .zshrc (nhưng chỉ dành cho shell đăng nhập). Xem Câu hỏi thường gặp về ZSH
Geeb

21

Không có tệp chung, nhưng bạn có thể làm cho mọi shell được đọc từ một tệp chung.

  1. bashđọc từ .bash_profilehoặc.bashrc
  2. zshđọc từ .zprofile .zshrc
  3. kshđọc từ .profilehoặc$ENV

Vì vậy, đây là những gì tôi làm:

~/.env

# Put environment variables here, e.g.
PATH=$PATH:$HOME/bin

~/.shrc

test -f "$HOME/.env" && . "$HOME/.env"

# Put interactive shell setup here, e.g.
alias ll='ls -l'
PS1='$PWD$ '
set -o emacs

~/.bashrc

test -f ~/.shrc && source ~/.shrc

# Put any bash-specific settings here, e.g.
HISTFILE=~/.bash_history
shopt -s extglob
IGNOREEOF=yes

~/.zshenv

# Put any zsh-specific settings for non-interactive and interactive sessions, e.g.
setopt braceexpand
setopt promptsubst
setopt shwordsplit

~/.zshrc

test -f ~/.shrc && source ~/.shrc

# Put any zsh-specific interactive settings here, e.g.
HISTFILE=~/.zsh_history
setopt ignoreeof

~/.profile

# Interactive sub-shells source .env, unless this is bash or zsh,
# because they already sourced .env in .bashrc or .zshrc.
if test -z "$BASH_VERSION" -a -z "$ZSH_VERSION" || test -n "$BASH_VERSION" -a \( "${BASH##*/}" = "sh" \)
then
    test -f "$HOME"/.env && . "$HOME"/.env
fi

# The name is confusing, but $ENV is ksh's config file for interactive sessions,
# so it's equivalent to .bashrc or .zshrc.
# Putting this here makes running an interactive ksh from any login shell work.
test -f "$HOME"/.shrc && export ENV="$HOME"/.shrc

# Put any login shell specific commands here, e.g.
ssh-add
stty -ixon

~/.bash_profile

source ~/.bashrc
source ~/.profile

~/.zlogin

# zsh sources .zshrc automatically, only need to source .profile
source ~/.profile

~/.zprofile

(empty)

Nếu bạn có quyền truy cập root vào hệ thống, một cách khác là thiết lập pam_env.

Bạn có thể đặt

session optional pam_env.so user_envfile=.env

trong /etc/pam.dtệp có liên quan (ví dụ /etc/pam.d/common-sessiontrên Debian), và sau đó khi người dùng đăng nhập, PAMsẽ đọc các biến môi trường từ đó ~/.env.

Lưu ý rằng pam_envvề cơ bản chỉ hỗ trợ VAR=valuecác mục.

Thêm thông tin:


14

Không có thứ nào giống như một tệp cấu hình môi trường cho các shell khác nhau, bởi vì nó thậm chí là vỏ cụ thể như thế nào được định nghĩa.

Trong csh bạn sử dụng setenvtrong bash bạn sử dụng exportđể xác định chúng.

Dù sao, bạn có thể viết tập tin cấu hình của riêng bạn và đưa nó sourcevào trong các dotfiles của shell của bạn.

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.