~/.bashrc ~/.bash_profile, ~/.profile 和 /etc/profile 的区别是什么?

 执行一个 shell 的时候分成login shell和non-login shell。

  1. 使用了sudo``su切换到某个用户身份执行 shell,也就是login shell
  2.  ssh 远程执行指令也是 login shell,也就是伴随登录的意思

login shell 会触发很多文件执行,路径如下:

如果以当前用户身份正常执行一个 shell,比如说./a.sh,就是一个non-login的模式。 这时候不会触发上述的完整逻辑。

另外shell还有另一种分法,就是

  1. interactive
  2. non-interactive。

interactive 是交互式的意思,当用户打开一个终端命令行工具后,会进入一个输入命令得到结果的交互界面,这个时候,就是interactive shell。

baserc文件通常只在interactive模式下才会执行,这是因为~/.bashrc文件中通常有这样的语句,如下图所示:

这个语句通过$-看到当前shell的执行环境

]# echo $-
himBH

带 i 字符的就是interactive,没有带i字符就不是。

因此, 如果你需要通过 ssh 远程 shell 执行一个文件,你就不是在 interactive 模式下,bashrc 不会触发。但是因为登录的原因,login shell 都会触发,也就是说 profile 文件依然会执行。

猜你喜欢

转载自blog.csdn.net/MyySophia/article/details/114015230