练习 2 来自缺课学期询问以下问题:
运行
PATH=
并尝试再次运行前面的命令,有些有效,有些无效,你能找出原因吗?
设置PATH=
会从变量中删除所有内容PATH
。然后echo $PATH
只产生一行空行。但是当我重新启动 shell 时,PATH
变量的所有内容又会出现。我的问题是PATH
当我重新启动 shell 时变量从哪里获取其值?
答案1
一般来说,每个进程都会继承其环境(包括 的值PATH
)从其父级开始。因此,如果您从终端仿真器启动 shell,则该 shell 将从终端继承,而终端又从桌面会话继承,依此类推。如果您追溯进程树,您会发现默认PATH
值/etc/environment
由pam_env当用户会话启动时模块。
此外,如果您使用的是 Windows Subsystem for Linux (WSL),则路径组件可能会通过以下方式从 Windows 主机会话继承:appendWindowsPath
互操作性功能。
对于 shell 的特定情况,该PATH
变量还可以通过各种系统范围和/或用户特定的配置文件进行设置或修改,具体取决于
- 您正在使用哪个 shell(bash、dash、ksh、zsh、csh 等)
- 如何调用 shell(作为登录 shell、作为交互式非登录 shell 或作为非交互式 shell)
对于 bash,您可以阅读的 INVOCATION 部分中的详细信息man bash
。