根据我如何调用脚本,WSL 会获取不同的 PATH

根据我如何调用脚本,WSL 会获取不同的 PATH

考虑以下 PowerShell 会话:

~ λ wsl echo '$PATH'
/usr/local/sbin:/usr/local/bin:... #redacted for brevity
~ λ wsl
taschan@georg:/mnt/c/Users/Tomas Aschan$ echo $PATH
/home/taschan/bin:/home/taschan/bin:/usr/local/sbin:/usr/local/bin:...

如您所见,$PATH根据我启动交互式 WSL 会话(wsl)还是直接运行脚本(wsl echo '$PATH'),变量具有不同的内容。

我并不惊讶这~/bin出现在交互式会话中的我的路径上;我的路径中有一行.bashrc将其设置为这样。

但是为什么在使用执行脚本时不运行这个wsl <thescript>?我是否可以以某种方式告诉我wsl,我希望我的配置文件设置在直接运行脚本时也可用?

答案1

进程从其父进程继承其环境。这意味着当从命令提示符或 WSL 启动进程时,环境将有所不同。此外,直接运行脚本时不会启动登录 shell,因此并非所有初始化脚本都会执行,特别是不会执行.bashrc

我相信 中的代码在两种情况下都会执行,所以也许那是更安全的地方。上次我研究这个主题时,bash 只加载或中~/.bash_profile的第一个 ,所以在使用初始化脚本时要小心。.bash_profile.bash_login.profile

执行命令时,您还可以使用bash.exe -ic command而不是wsl.exe来调用交互式 shell。需要注意的是,据说bash.exe当前已被弃用,因此这似乎不太理想,尽管它仍然有效,并且会继续有效一段时间。

相关内容