全局设置交互式 Shell (Bash)

全局设置交互式 Shell (Bash)

我意识到有/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'

相关内容