Linux 登录时bash配置加载

1、起因

通过ssh远程执行alias命令时,返回的结果和我预期的不一样,在CentOS系列上是正常的,但是在SUSE系统上就是空的。但是登录到SUSE系统上执行,返回结果却不为空。

直觉告诉我这肯定是哪里的配置文件没有加载,肯定和/etc/profile、~/.bashrc之类的文件有关。

2、bash的四种模式

上面说到的那几个配置文件都涉及到bash的登录,login还是非login,交互式还是非交互式有关。

其中,login shell就是指我们登录时获取的第一个shell,不管是本地还是远程ssh登录的shell,都是login shell,也可以理解为需要输入用户名密码的shell。而非login shell也好理解,比如你登录系统后执行某个脚本,此时脚本会另外开启一个shell执行,这个后面开启的shell就是非login shell。

而交互式和非交互式就很好理解了,远程登录肯定是交互式,远程执行命令肯定就是非交互式,这也就是造成上述问题的原因了。

下面我们就来说一下这四种方式下,bash的配置文件加载情况。

A、CentOS 7系列

1、login shell + 交互式 bash
先加载/etc/profile,然后依次寻找~/.bash_profile,~/.bash_login,~/.profile这三个文件,只要成功加载其中一个配置,就不会继续往下执行,直接退出返回。

2、login shell + 非交互式 bash
只加载~/.bashrc

3、非login shell + 交互式bash
根据BASH_ENV环境变量去加载配置文件

4、非login shell + 非交互式bash
只加载~/.bashrc

B、SUSE系列

而对于SUSE系列,情况又有所不同。

1、login shell + 交互式 bash
该情况和CentOS 7系列表现一致,先加载/etc/profile,然后依次寻找~/.bash_profile,~/.bash_login,~/.profile这三个文件,只要成功加载其中一个配置,就不会继续往下执行,直接退出返回。

2、login shell + 非交互式 bash
依次加载/etc/bash.bashrc~/.bashrc

3、非login shell + 交互式bash
和CentOS 7系列表现一致,根据BASH_ENV环境变量去加载配置文件

4、非login shell + 非交互式bash
依次加载/etc/bash.bashrc~/.bashrc

C、使用sh启动bash

还有一种比较特殊的情况,就是使用sh启动bash,配置文件又有些不同了。

1、login shell + 交互式 bash
加载/etc/profile~/.profile

2、login shell + 非交互式 bash
同上,加载/etc/profile~/.profile

3、非login shell + 交互式bash
根据ENV环境变量去加载配置文件

4、非login shell + 非交互式bash
不加载任何配置文件

3、根因

现在再来看开始提到的问题,在SUSE系统上,对于远程执行命令而言,是非login shell + 非交互式bash,会依次加载/etc/bash.bashrc 和 ~/.bashrc,但是由于alias的设置是只针对交互式bash才会生效,因此通过远程执行命令的方式,alias返回为空。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中,我们可以通过编辑和添加bash_profile文件来自定义用户的环境变量和命令别名等设置。 首先,我们需要使用一个文本编辑器,比如vi或nano,打开用户的bash_profile文件。该文件一般位于用户的主目录下,文件名为.bash_profile或.bashrc。如果该文件不存在,可以直接创建一个新的。 假设我们要编辑的用户为"example",那么我们可以使用以下命令打开或创建该用户的bash_profile文件: ``` vi /home/example/.bash_profile ``` 或 ``` nano /home/example/.bash_profile ``` 接下来,我们可以在文件中添加需要的设置。例如,如果我们想要添加一个新的环境变量"MY_VAR",并将其值设置为"Hello World",可以在文件中添加以下内容: ``` export MY_VAR="Hello World" ``` 如果我们想要创建一个命令别名,比如将"ls -al"命令别名为"ll",可以添加以下内容: ``` alias ll="ls -al" ``` 我们可以根据需要添加更多的设置,每个设置占据一行,并且以换行符分隔。 编辑完成后,保存文件并退出编辑器。然后,我们需要使新的bash_profile设置生效。可以通过重新登录当前用户,或者在终端执行以下命令来使新的设置立即生效: ``` source ~/.bash_profile ``` 以上就是在Linux系统中添加bash_profile的基本步骤。通过自定义bash_profile文件,我们可以方便地个性化配置用户的环境变量和命令别名,提高工作效率。 ### 回答2: 要在Linux系统中添加bash_profile,可以按照以下步骤进行操作: 1. 登录Linux系统并打开终端。 2. 输入以下命令来创建一个新的bash_profile文件: ``` touch ~/.bash_profile ``` 3. 使用文本编辑器(如vi或nano)打开bash_profile文件: ``` vi ~/.bash_profile ``` 4. 在bash_profile文件中添加需要的配置内容,例如设置环境变量、别名、函数等。每行配置项都需要以export关键字开头,示例如下: ``` export PATH=$PATH:/usr/local/bin alias l='ls -l' myfunc() { echo "Hello, World!" } ``` 请根据实际需求自行添加其他配置内容。 5. 保存并关闭文件(如果使用vi,则按下Esc键,然后输入:wq并按下Enter键)。 6. 执行以下命令使更改生效: ``` source ~/.bash_profile ``` 或者你也可以重新打开一个终端窗口来加载新的bash_profile。 完成以上步骤后,bash_profile中的配置将会生效。每次登录或打开终端,系统会自动加载该文件以应用所包含的配置。 ### 回答3: 在Linux中,添加bash_profile是为了定制用户的shell环境。用户的bash_profile文件通常存储在家目录下的隐藏文件夹中。以下是添加bash_profile的步骤: 1. 打开终端,使用vim或其他文本编辑器打开用户的bash_profile文件: ```shell vim ~/.bash_profile ``` 2. 如果该文件不存在,则会创建一个新的bash_profile文件。 3. 在bash_profile文件中,可以添加任意的自定义设置和命令。例如,可以设置环境变量、别名、函数等: ```shell export PATH=$HOME/bin:$PATH alias ll='ls -l' function greet(){ echo "Hello, $USER!" } ``` 4. 保存并退出文件。在vim中,按下Esc键,然后输入冒号(:),接着输入wq并按下回车: ```shell :wq ``` 5. 使bash_profile文件生效。可以重新启动终端或运行以下命令来使其生效: ```shell source ~/.bash_profile ``` 6. 现在,用户的bash_profile文件已经添加并生效。可以在新的终端会话中验证设置和命令是否运行正常: ```shell echo $PATH ll greet ``` 通过以上步骤,用户可以定制自己的bash_profile文件,以符合个人需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值