考虑以下 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
当前已被弃用,因此这似乎不太理想,尽管它仍然有效,并且会继续有效一段时间。