~/.bashrc
是唯一指定用户特定环境变量,别名,对PATH
变量的修改等的地方吗?我问是因为
~/.bashrc
似乎只是bash
-但其他外壳也存在…… br /> #1 楼
$HOME/.profile
文件被许多shell使用,包括bash,sh,dash和其他可能的shell。从bash手册页:
bash时作为交互式登录外壳程序被调用,... ...它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。读取该文件后,它将按此顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在且可读的命令中读取并执行命令。
csh和tcsh显然不看
~/.profile
,但是那些外壳有点过时了。#2 楼
~/.profile
是环境变量定义和登录时要运行的非图形程序的正确位置(例如ssh-agent
,screen -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具有~/.zshrc
。另请参见:
.bashrc
和.bash_profile
之间的差异/>
应使用哪个安装文件来通过bash设置环境变量?
Zsh没有达到
~/.profile
评论
别忘了,除了.zprofile之后,zsh还具有.zlogin,后者在.zshrc之后运行(但仅适用于登录Shell)。请参阅ZSH常见问题解答
– Geeb
2014年1月23日14:23在
#3 楼
没有通用文件,但是您可以使每个外壳程序都从通用文件读取。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
。您可以放置
在相关的
/etc/pam.d
文件中(例如Debian上的/etc/pam.d/common-session
)中的session optional pam_env.so user_envfile=.env
,然后在用户登录时,
PAM
wil l从~/.env
读取环境变量。请注意,
pam_env
基本仅支持VAR=value
条目。更多信息:
pam_env
#4 楼
没有像这样的环境配置文件适用于不同的shell,因为它甚至是特定于shell的,如何定义它们。在csh中,在bash中使用
setenv
,而在qash中使用export
定义它们。无论如何,您都可以编写自己的配置文件,并将其与
source
一起包含在shell的dotfile中。
评论
默认情况下,Zsh不读取.profile。这就是为什么我删除了先前的回答,以说明这一点。 Zsh仅在由名为sh的符号链接调用时读取.profile。
– fschmitt
10-10-13在15:48
tcsh在某些环境中仍然很流行。
– Maciej Piechotka
2010-10-13 23:01
fschmitt:谢谢你的指正;固定。 Maciej Piechotka:毫无疑问,这是真的。但是,也可以(尽管很复杂)使* rc脚本根据运行它们的shell导入特定的其他rc脚本。
– msw
2010-10-14 3:27
对于这种工作方式,用户需要确保每个外壳程序都是登录外壳程序。例如,在Gnome终端中,转到Profile-> Title and Command,然后将Run command作为登录shell启用。您还需要删除〜/ .bash_profile或将其作为源〜/ .profile。
– Mikel
13年11月26日在20:07
@fschmitt您也可以从Zsh .zshrc内部获取$ HOME / .profile。我倾向于将所有可移植外壳程序内容放在.profile中,然后可以在可能会在其间进行跳转的任何环境中共享它。
–本杰明·R
17年5月31日在3:51