LINUX---shell变量(或bash变量)和环境变量的区别

Shell 变量是特定于当前 shell 会话的变量。

作用范围:仅在当前 shell 会话中有效。如果你打开了多个终端窗口,每个窗口都有自己的一组 shell 变量,彼此独立。

生命周期:随着 shell 会话的结束而消失,不会传递给其他 shell 会话。

用途:用于在命令行中暂时存储数据,如临时变量或用于脚本中的数据。

设置方法:可以直接在命令行中设置,或通过脚本进行设置。

环境变量是可以在整个操作系统中被不同程序和进程共享的变量。

作用范围:在整个操作系统中都可见,供不同的程序和进程使用。

生命周期:在操作系统中持续存在,直到系统重启或手动删除。

用途:用于配置操作系统环境,如系统路径、用户配置等。

设置方法:通常通过配置文件(如 /etc/profile、~/.bashrc、~/.bash_profile)进行设置,可以使用 export 命令将 shell 变量导出为环境变量。


PATH环境变量有什么重要作用?

PATH 环境变量具有非常重要的作用。它定义了一系列目录,当用户在命令行输入一个命令时,系统会按照这些目录的顺序来搜索可执行文件。如果在这些目录中找到了对应的可执行文件,系统就会执行它。

主要作用

1.简化命令执行:用户不需要输入完整的路径就能运行程序或脚本。例如,当用户输入 ls 命令时,系统会在 PATH 环境变量定义的目录中搜索名为 ls 的可执行文件。

2.提高效率:通过将常用命令的路径添加到 PATH 中,用户可以在任何目录下直接运行这些命令,而不需要切换到特定目录。

3.灵活性:用户可以根据需要动态修改 PATH 环境变量,添加或移除目录,以适应不同的工作环境。

示例

  • 查看当前 PATH

    echo $PATH
    
  • 添加新目录到 PATH

    export PATH=$PATH:/new/directory/path
    

通过合理配置 PATH 环境变量,可以大大提高工作效率和操作的便利性。

分别在/etc/profile、~/.bash_profile 和 ~/.bashrc 设置环境变量时有什么区别?

/etc/profile、~/.bash_profile 和 ~/.bashrc 都可以用来设置环境变量,但它们的作用范围和加载时机有所不同:

/etc/profile

作用范围:系统级别。对系统中的所有用户生效。

加载时机:当用户登录时,所有兼容 POSIX 的 shell(如 Bash、sh)都会加载 /etc/profile。

用途:用于设置系统范围的环境变量和执行系统范围的初始化脚本。

~/.bash_profile

作用范围:用户级别。只对当前用户生效。

加载时机:当用户登录时,Bash shell 会加载 ~/.bash_profile。

用途:用于设置用户特定的环境变量和执行用户特定的初始化脚本。通常会包含一行代码来加载 ~/.bashrc,以确保登录 shell 也能加载 ~/.bashrc 中的配置:

~/.bashrc

作用范围:用户级别。只对当前用户生效。

加载时机:每次启动一个新的非登录交互式 shell 时,Bash shell 会加载 ~/.bashrc。例如,当你在终端中打开一个新的 shell 会话时,~/.bashrc 会被加载。

用途:用于设置用户特定的别名、函数和命令提示符等。

加载顺序和关系

登录 shell:当用户登录时,Bash shell 会按以下顺序加载配置文件:

    1. /etc/profile
    2. 用户的 ~/.bash_profile、~/.bash_login 或 ~/.profile(Bash 会按这个顺序查找并加载第一个找到的文件)

非登录交互式 shell:当用户启动一个新的非登录交互式 shell 时,Bash shell 会加载用户的 ~/.bashrc。

相关推荐
我们的五年4 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
我言秋日胜春朝★1 小时前
【Linux】进程地址空间
linux·运维·服务器
C-cat.1 小时前
Linux|环境变量
linux·运维·服务器
yunfanleo1 小时前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
糖豆豆今天也要努力鸭2 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎2 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
ac.char2 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾2 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
长弓聊编程3 小时前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.3 小时前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++