全球bash_profile


20

我知道有 /etc/profile,并/etc/bashrc设置全局环境变量,也许我只是误解他们的目的文件,但...

是否有全球 bash_profile文件吗?

我正在使用Mac OS X

Answers:


15

它没有被调用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/bash.bashrc从非交互式外壳读取内容。/etc/profile可以通过非交互式外壳读取。看到登录外壳程序和非登录外壳程序之间的区别?
吉尔(Gilles)“所以,别再邪恶了”

@吉尔斯-我不清楚你想在这里提出什么观点。非交互式登录外壳确实是不寻常的事情。作为参考,我引用的代码不是我自己创建的。它来自/etc/profileUbuntu 12.04中的默认设置。如果有人想要/etc/profile只在bash下执行而又没有其他与sh兼容的shell才能执行的操作,您会建议什么呢?
ire_and_curses 2012年

/etc/profile我系统的系统文件的顶部注释为:# System-wide .profile for sh(1)。这profilesh特定的意思吗?是否sh以某种方式运行过bash

@Josh Voigts- sh是的子集bash/etc/profileshbash和所有其他Bourne兼容的shell执行。
ire_and_curses 2012年

@ire_and_curses似乎在/etc/bashrcMac上调用了文件,而不是/etc/bash.bashrc。它似乎也可以运行/bin/sh
BrainStorm.exe 2015年


0

全局设置Interactive 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

现在,我可以通过将新的.shfiles放入/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' 

将根据需要产生彩色结果。

登录shell是在引导计算机或CTRLALTF1通过FNth虚拟控制台切换虚拟控制台时获得的内容。

登录外壳程序/etc/profile在加载/etc/profile.d/*.sh文件的同时进行加载。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.