我可以使用printenv
命令获取系统环境变量,但我需要单独的变量数据:
如何分别获取本地(会话范围)、用户(用户范围)和系统(系统范围、全局)环境变量的列表?
操作系统:Debian-like Linux (x64), kernel: 4.19
.
答案1
我认为您对 Linux 环境变量的工作原理有误解。正在运行的 shell 的环境变量仅为那正在运行的 shell 的实例。除此之外,它们没有任何意义或相关性。如果您更改正在使用的 shell 中的 $PATH 变量,则该更改只会对该 shell 的该实例产生影响,而不会影响您可能正在运行的其他 shell 实例。
当 shell 启动并且用户登录时,可以通过各种 shell 脚本设置环境变量,这些脚本可以在系统范围或每个用户的基础上定义默认环境变量。对于,这些是类似(系统范围)或或(特定于用户)的bash
脚本。据我所知,无法从正在运行的 shell 确定特定变量的设置位置 - 您需要检查这些文件。/etc/profile
~/.bash_profile
~/.bashrc
您应该注意的另一个概念是出口变量。export
in 命令可bash
用于标记哪些变量应导出到正在运行的 shell 可能创建的新子 shell。
另外,请注意环境变量是特定于特定 shell 程序的,它们对于 Linux 系统来说不是全局的。因此,bash
(我一直使用作为示例的)变量可能与中使用的变量csh
(尽管可能有一些相似之处)和/或它们可能被设置为不同的默认值。