是~/.bashrc
唯一指定用户特定环境变量、别名、PATH
变量修改等的地方吗?
我问是因为看起来似乎~/.bashrc
只是bash
-,但其他外壳也存在......
答案1
该文件$HOME/.profile
由许多 shell 使用,包括 bash、sh、dash 以及可能的其他 shell。
从 bash 手册页:
当 bash 作为交互式登录 shell 被调用时,...它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取并执行命令。
csh 和 tcsh 明确不看,~/.profile
但这些 shell 有点过时了。
答案2
~/.profile
是环境变量定义和登录时要运行的非图形程序的正确位置(例如ssh-agent
,screen -m
)。如果您的登录 shell 是 Bourne 风格的 shell(sh、ksh、bash),则它由您的登录 shell 执行。相反, Zsh 运行~/.zprofile
,Csh 和 tcsh 运行~/.login
。
如果您在 X 显示管理器(xdm、gdm、kdm...)下登录,是否~/.profile
运行取决于您的发行版配置显示管理器以及桌面环境的方式。如果您在“自定义会话”下登录,通常会执行~/.xsession
.
~/.bashrc
是 bash 特定设置的正确位置,例如别名、函数、shell 选项和提示。顾名思义,它是 bash 特有的; csh 有~/.cshrc
, ksh 有~/.kshrc
, zsh 有 <drumroll> ~/.zshrc
。
也可以看看:
答案3
没有通用文件,但您可以使每个 shell 都从通用文件中读取。
bash
读取.bash_profile
或.bashrc
zsh
读取自.zprofile
和.zshrc
ksh
读取.profile
或$ENV
所以这就是我所做的:
~/.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)
如果您拥有系统的 root 访问权限,另一种方法是设置pam_env
.
你可以把
session optional pam_env.so user_envfile=.env
在相关/etc/pam.d
文件中(例如/etc/pam.d/common-session
在 Debian 上),然后当用户登录时,PAM
将从~/.env
.
注意,pam_env
基本上只支持VAR=value
条目。
更多信息:
答案4
不存在针对不同 shell 的环境配置文件之类的东西,因为它甚至是特定于 shell 的定义方式。
在 csh 中使用,setenv
在 bash 中使用export
来定义它们。
无论如何,您可以编写自己的配置文件并将其包含source
在 shell 的点文件中。