it-swarm-vi.com

Có tệp tương đương ".bashrc" được đọc bởi tất cả các shell không?

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

Tôi hỏi vì dường như ~/.bashrc dường như chỉ là bash-, nhưng các shell khác tồn tại quá LỚN

115
Stefan

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

Từ trang bash man:

Khi bash được gọi là Shell đă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 ~/.profile nhưng những cái vỏ đó là cổ xưa.

97
msw

~/.profile là nơi thích hợp cho 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 đă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 ~/.zprofile thay vào đó, 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, ...), cho dù ~/.profile được chạy tùy thuộc vào cách trình quản lý hiển thị của bạn và có lẽ môi trường máy tính để bàn được phân phối theo 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 Viking, điều đó thường thực thi ~/.xsession.

~/.bashrc là nơi thích hợp cho các cài đặt dành riêng cho bash, chẳng hạn 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ó ~/.kshrc và zsh có <trốngroll> ~/.zshrc.

Xem thêm:

64

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

  1. bash đọc từ .bash_profile hoặc .bashrc
  2. zsh đọc từ .zprofile.zshrc
  3. ksh đọc từ .profile hoặ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 tệp /etc/pam.d có liên quan (ví dụ: /etc/pam.d/common-session trên Debian) và sau đó khi người dùng đăng nhập, PAM sẽ đọc các biến môi trường từ ~/.env.

Lưu ý rằng về cơ bản pam_env Chỉ hỗ trợ các mục VAR=value.

Thêm thông tin:

23
Mikel

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

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

Dù sao, bạn có thể viết tệp cấu hình của riêng mình và bao gồm nó với source trong các tệp chấm của trình bao của bạn.

15
echox