Linux 环境变量

常用环境变量

  • env 命令可以查看所有全局环境变量
  • set命令还可查看局部环境变量
# 当前用户主目录
$HOME
# 当前目录
$PWD
# 环境变量(查找输入的内置命令的路径集合)
$PATH
# 当前用户名
$USER
# 当前使用的shell
$SHELL
# 当前进程的PID
$$

shell中设置环境变量(临时生效)

  • 添加环境变量是export,删除环境变量是unset`
    • export 设置的环境变量可用于其创建的所有子shell
  • 通过export设置的环境变量在shell退出后失效
    • 只有写入 /etc/profile 等文件中才会长期生效
    • 原理是每次启动shell前会读取指定文件
  • source xxx 的作用在本shell中执行程序,不启动子shell
    • ./xxx执行时,启动的是子shell,此时脚本中export出的变量是不能被父shell(即当前shell)使用的,所以需要使用source来执行
  • 我们在shell脚本中赋值给变量实际是在设置局部环境变量
    • 这种环境变量不会被子shell继承
    • 可以在脚本中通过export把前面的局部环境变量导出为全局环境变量
  • 如果我们在脚本中赋值的变量没有export,则通过脚本启动的程序不能看到脚本中设置的环境变量
    • 因为实际上启动了子shell来执行程序
    • 通过exec启动也不能使用非export的环境变量
      • exec启动的好处在于可以接收到上层给脚本的信号
      • 这在容器中很关键
# 1.sh
export a="hello"
b="world"

# 输出 hello,没有world
./2.sh
exec ./2.sh

# 2.sh
echo "$a $b"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

shell预加载环境变量文件(长期生效)

  • 登陆shell

    • 场景
      • 终端登陆时,ssh链接时,su --login <username> 切换用户时
    • 用bash登陆时会从下面6个文件读取命令
      • 全局
        • /etc/profile
          • 里面会启动/etc/bashrc或者/etc/bash.bashrc
      • 用户级
        • 大多数发行版只用到了甚至只创建了其中的一到两个文件
        • shell会按照下面的顺序查找前三个文件并运行第一个被找到的文件,其与忽略
          • ~/.bash_profile
            • ~/.bashrc会在启动 ~/.bash_profile时被查找
          • ~/.bash_login
          • ~/.profile
    • 使用zsh登录时加载的是~/.zshrc和/etc/zshrc目录下的文件
  • 非登陆时的交互式shell

    • 场景
      • 直接运行 bash 时,su <username>切换用户时(前面没有加 --login)
    • 启动时只会读取 /etc/profile~/.bashrc文件
  • 非交互式shell

    • 执行shell脚本时用到这种shell
    • 如果设置了环境变量BASH_ENV, 会执行其指定的文件
    • 否则使用启动脚本的shell拥有的环境变量

千万别混淆bash、zsh四种运行方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值