Mac和Ubuntu系统下.bash_profile和.bashrc文件

来源:互联网 发布:手机如何关注淘宝达人 编辑:程序博客网 时间:2024/06/05 10:16

Mac和Ubuntu系统下.bash_profile和.bashrc文件

本文部分参考Josh Staiger文章。

  • Mac和Ubuntu系统下bash_profile和bashrc文件
    • 前言
    • login shell 和 non-login shell
      • login shell
      • non-login shell
    • 为什么需要两种不同文件
    • Mac例外
      • 建议


前言

我平时使用Ubuntu或者Mac。当设置shellPATH 或者其他环境变量时,你可以放在.bashrc.bash_profile其中的任何一个文件里,如果文件不存在你还可以创建一个,但是两个文件的启动有何区别?

以Ubuntu为例.bash_profilelogin shell 启动时执行而.bashrcnon-login shell 启动时执行。(Mac 情况不同,后文提到)


login shellnon-login shell

login shell

用户登录(输入用户名密码)时打开的shell,就叫做login shell。用户登录主要分三种:
命令行登录
依次寻找下面三个文件。

~/.bash_profile~/.bash_login~/.profile

需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。

ssh登录
和命令行登录情况相同

图形界面登录
只加载 /etc/profile~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。

non-login shell

用户进入操作系统以后,常常会再手动开启一个shell。这个shell就叫做 non-login shell,意思是它不同于登录时出现的那个shell,不读取/etc/profile.profile等配置文件。

non-login shell会读入用户自己的bash配置文件 ~/.bashrc。大多数时候,我们对于bash的定制,都是写在这个文件里面的。


为什么需要两种不同文件

比如你想在登录时打印一些电脑诊断信息(内存使用,在线用户等等)。你只想在每次登录的时候看到,所以将相关代码写入.bash_profile 如果你写入.bashrc 则你每次打开terminal都会打印这些信息。


Mac例外

Mac的Terminal打开的每个新shell默认为login shell只加载.bash_profile。而且,不管是ssh登录,还是在图形界面里启动shell窗口,都是如此。

建议

将下面的脚本加入.bash_profile

if [ -f ~/.bashrc ]; then    . ~/.bashrcfi

注:第二行开头的那个点,是source命令的简写形式,表示运行某个文件,写成source ~/.bashrc也是可以的。[ -f ~/.bashrc ] 中括号内侧有空格。

这样执行.bash_profile 时也会执行.bashrc

1 0
原创粉丝点击