如何为当前用户永久修改PATH环境变量?bash默认的启动脚本到底是哪个文件?什么是login shell?

本文详细解释了如何在Ubuntu 18系统中将环境变量永久添加到~/.bashrc中,区分了loginshell和非loginshell的区别,并指导了在不同类型的shell脚本中正确放置配置。

本文解决以下问题:

  • ubuntu配置在系统脚本~/.bash_profile里的环境变量为什么重开terminal后又不生效了?
  • 如何为当前用户永久修改PATH环境变量?
  • bash默认的启动脚本到底是哪个文件?~/.bashrc~/.bash_profile~/.profile还是~/.bash_login
  • 什么是login shell?什么又是非login shell

前言

起因是为了方便使用Netronome SDK相关的命令,需要为PATH环境变量添加程序所在路径:

# Netronome SDK
PATH=$PATH:/opt/netronome/bin:/opt/netronome/p4/bin
export PATH

但是这是临时设置的变量,重启或者开启其他terminal就会失效,于是寻求一种永久修改PATH环境变量的方法,也就是把这两句命令写到bash默认的启动脚本里边,每次启动新的terminal都会执行一遍的那种;

结果一查,有~/.bashrc~/.bash_profile~/.profile~/.bash_login这么些脚本……我到底该加到哪里?

查询中就有了以下问题:

  1. bash默认的启动脚本到底是哪个文件?~/.bashrc~/.bash_profile~/.profile还是~/.bash_login?更确切来说,我上面那段想加到用户bash启动时执行的脚本应该放在哪个文件?
  2. 什么是login shell?什么又是非login shell?具体来说,我通过ssh远程连接的shell和Ubuntu桌面版Ctrl + Alt + T打开的shell有什么区别?

有些博客内容真的很让人糟心,只给一个结论就算了结论还不太对。

我可以保证我的结论是有调研和测试过的,可以回答以上两个问题,放心食用。

但需要注意的是:不同linux发行版对应的文件名可能不太一样,本文在Ubuntu 18下测试的

结论

还是一样,先说结论:

我这种Ubuntu 18的系统,都放到~/.bashrc里边就好,保证能执行到,就是不知道这样是否规范。

原因

我们首先得知道什么是login shell非login shell

  • login shell可以理解为需要你登录(login)的shell,需要输入用户名、输入密码(软件帮你存储好的也算),比如ssh远程登录;

  • 非login shell则相反,是无需登录,而由某些程序启动的shell,比如你通过su切换的shell、桌面版ubuntu打开的shell(可以理解为你已经登录的用户打开的shell);

区分两者的一个办法(来自sky凌乱的微笑,sky老师的博客)是在该shell下执行echo $0,如果得到的有-前缀则是login shell,反之不是。

在这里插入图片描述

注:su 可以用 -l 参数使切换为login shell,否则默认是非login shell

脚本执行顺序

  • 对于login shell来说,会依次查询用户目录下的以下文件~/.bash_profile~/.bash_login~/.profile是否存在,找到了一个脚本就不会再执行后面的配置脚本。

  • 对于非login shell,则只会按照~/.bashrc执行。

执行顺序可以通过在以上文件中加入echo进行测试。

注:至少是Ubuntu18下,login shell默认只有~/.profile一个配置文件,而且在文件里面默认包含了~/.bashrc

[...]
# if running bash, 即if "$BASH_VERSION"不为空
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

所以说,我的Ubuntu 18不管是login shell还是非login shell,都会执行一次~/.bashrc脚本,所以放里边就好。至于其他情况,就参考以上执行顺序,自行判断应该放到哪个文件里吧。

注:需要注意的是这种方法是只对当前用户有效,虽然我要的就是这效果吧。如果想对所有用户生效,需要修改/etc/profile,但是/etc/profile我测试也是只对login shell有效;就不多说了。

结语

以上。

简单整理测试,有问题还请补充指出,有帮到的话请留下三连,多谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WuPeng_uin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值