我意识到有/etc/profile
一些/etc/bashrc
文件用于设置全局环境变量,也许我只是误解了它们的目的,但是......
有全局bash_profile
文件吗?
我使用的是 Mac OS X
答案1
它没有被调用bash_profile
,但是全局 bash 配置的标准位置是/etc/bash.bashrc
。/etc/profile
如果 shell 是 bash,通常会调用它。例如,在我的/etc/profile
我有:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
在使用方面,/etc/profile
为所有 Bourne 兼容 shell(sh、bash、ksh 等)提供系统范围的配置。通常不需要等效的/etc/bash_profile
,因为配置文件的目的是控制登录 shell 的行为。通常你想要做的任何事情都不会是特定于 bash 的。/etc/bash.bashrc
是 bash 特定的,并且将为登录和非登录 shell 运行。
更复杂的是,看起来 OS X 甚至没有/etc/bash.bashrc
.这可能与 OS X 中的终端有关默认作为登录 shell 运行,所以区别就消失了:
终端窗口准则的一个例外是 Mac OS X 的 Terminal.app,它默认为每个新终端窗口运行一个登录 shell,调用 .bash_profile 而不是 .bashrc。其他 GUI 终端仿真器可能会执行相同的操作,但大多数往往不会这样做。
我不运行 OS X,所以我的知识范围仅限于此。
答案2
/etc/profile
是全球的bash_profile
。没有特定于 bash 的文件,bash 只是读取所有 Bourne 风格 shell 读取的标准文件。您可以在其中设置系统范围的环境变量。
看是否有一个所有 shell 都能读取的“.bashrc”等效文件?有关 bash 常见启动文件的一般概述。
答案3
全局设置交互式 Shell (Bash)
这不会加载/etc/profile
,因此不会/etc/profile.d/
加载任何内容(与登录 shell 不同,请参阅末尾)。
其全局文件是 /etc/bashrc 或 /etc/bash.bashrc (取决于-DSYS_BASHRC=
编译时设置的标志):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
通常最好按原样(尽可能)保留此文件以避免冲突。我使用的策略与登录 (/etc/profile) shell 使用的策略类似。
我的策略是将加载程序附加到上述文件:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
现在,我可以通过将新的 .sh 文件放入 /etc/bashrc.d 目录中,轻松地将 n 个自定义项添加到全局交互式 (bash) shell 文件中。
全局对 Grep 进行着色
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
你可以用这一行来做到这一点:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
比较 profile.d 与 bashrc.d
如果读完本文后您仍然不相信,请执行以下操作来说服自己:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
打开一个新的终端模拟器并使用 grep 在用户目录中搜索一些常用单词,例如“the”
grep -r 'the'
任何东西都不应该是有颜色的。通过执行 CTRLALTF1 在虚拟控制台中执行相同的操作(请记住,您的 X 服务器可能在 CTRLALTF7 上运行,以便您可以切换回来。例如,如果您忘记了,只需重新启动桌面管理器)
grep -r 'the'
将产生所需的彩色结果。
任何东西都不应该是有颜色的。在虚拟控制台中执行相同的操作CTRLALTF1(请记住,您的 X 服务器可能正在运行,CTRLALTF7以便您可以切换回来。例如,如果您忘记了,只需重新启动桌面管理器)
grep -r 'the'
将产生所需的彩色结果。
CTRLALTF1登录 shell 是当您启动计算机或通过虚拟控制台切换虚拟控制台时获得的FNth。
/etc/profile
加载文件时会加载登录外壳/etc/profile.d/*.sh
。
答案4
或者,您可以使用关键字“export”在本地 .bashrc 文件中设置变量;例如:导出 HI='Hello_World'