it-swarm.cn

是否所有外壳程序都读取“ .bashrc”等效文件?

~/.bashrc是指定用户特定的环境变量,别名,对PATH变量的修改等的唯一位置?

我问,因为似乎~/.bashrc似乎仅bash,但是也存在其他shell ...

115
Stefan

文件 $HOME/.profile被许多shell使用,包括bash,sh,dash和其他可能的shell。

在bash手册页中:

当bash作为交互式登录Shell调用时,...它首先从文件/ etc/profile中读取并执行命令(如果该文件存在)。读取该文件后,它将按该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令。

csh和tcsh明确不要看~/.profile,但这些壳有些陈旧。

97
msw

~/.profile是环境变量定义和登录时要运行的非图形程序的正确位置(例如ssh-agentscreen -m)。如果它是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

也可以看看:

64

没有公用文件,但是您可以使每个Shell从公用文件中读取。

  1. bash从_.bash_profile_或_.bashrc_读取
  2. zsh从_.zprofile__.zshrc_中读取
  3. 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)
_

如果您具有系统的超级用户访问权限,则另一种方法是设置_pam_env_。

你可以放

_session optional pam_env.so user_envfile=.env
_

在相关的_/etc/pam.d_文件中(例如Debian上的_/etc/pam.d/common-session_),然后当用户登录时,PAM将从_~/.env_中读取环境变量。

请注意,_pam_env_基本上仅支持_VAR=value_条目。

更多信息:

23
Mikel

没有像不同的shell那样的环境配置文件这样的东西,因为它甚至是Shell特定于它们的定义方式。

在csh中,在bash中使用setenv来定义export

无论如何,您都可以编写自己的配置文件,并将其与source一起包含在shell的dotfile中。

15
echox