Answers:
它没有被调用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中的Terminals 默认以登录shell身份运行,因此区别消失了:
终端窗口准则的一个例外是Mac OS X的Terminal.app,它在默认情况下为每个新的终端窗口运行一个登录Shell,并调用.bash_profile而不是.bashrc。其他GUI终端仿真器可能会做同样的事情,但大多数都不会。
我没有运行OS X,所以我的知识到此为止。
/etc/profile
Ubuntu 12.04中的默认设置。如果有人想要/etc/profile
只在bash下执行而又没有其他与sh兼容的shell才能执行的操作,您会建议什么呢?
sh
是的子集bash
。/etc/profile
对sh
,bash
和所有其他Bourne兼容的shell执行。
/etc/bashrc
Mac上调用了文件,而不是/etc/bash.bashrc
。它似乎也可以运行/bin/sh
。
/etc/profile
是全球的 bash_profile
。没有专门针对bash的文件,bash只是读取所有Bourne风格的shell读取的标准文件。您可以在其中设置系统范围的环境变量。
请参阅是否所有外壳程序都读取“ .bashrc”等效文件?有关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
现在,我可以通过将新的.shfiles放入/etc/bashrc.d目录中,轻松地将n个自定义项添加到全局交互式(bash)shell文件中。
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
您可以使用以下这种方法:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
如果在阅读本文后仍然不满意,请这样做以说服自己:
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'
将根据需要产生彩色结果。
登录shell是在引导计算机或CTRLALTF1通过FNth虚拟控制台切换虚拟控制台时获得的内容。
登录外壳程序/etc/profile
在加载/etc/profile.d/*.sh
文件的同时进行加载。
/etc/bash.bashrc
从非交互式外壳读取内容。/etc/profile
可以通过非交互式外壳读取。看到登录外壳程序和非登录外壳程序之间的区别?