栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

我该把我的shell初始化脚本写在哪里?什么又是login shell?

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我该把我的shell初始化脚本写在哪里?什么又是login shell?

本文解决以下问题:

  • ubuntu配置在系统脚本~/.bash_profile里的环境变量为什么又不生效了?
  • 什么是login shell?什么又是非login shell?
前言

起因是为了方便root敲Netronome SDK相关的命令,就想在bash启动脚本里面加上如下内容:

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

查完发现应该是要加到~/.bash_profile里面,我的目录下并没有这个文件,加了以后发现还是没有生效,只能source ~/.bash_profile ,而且每次切换到该用户都得重新通过source启用;搜索过程就发现这么几个把我绕晕了的问题,今天来好好解决一下:

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

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

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

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

结论

还是一样,先说结论:

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

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

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

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

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

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

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

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

我得到的结论是,这种命令还是放在~/.profile下吧,然后每次通过su切换的时候加上-l参数变为login shell,以保证不管是ssh还是su -l切换到该用户,配置脚本正确执行,也就能正确加载我们的$PATH环境变量。

结语

以上。

简单整理记录了一下,可能还不是很完备,有问题请指出,多谢!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号