Tob*_*oby 10 windows-subsystem-for-linux
我在 Windows 10 上通过 WSL 2.0 使用 Ubuntu,并希望从 Windows 命令行运行 Texlive。为此,我将 Texlive 文件夹添加到路径中/etc/environment
(我还尝试了许多其他位置,例如$HOME/.bashrc
):
C:\Users\scott\Documents>wsl echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/system32:...
C:\Users\scott\Documents>wsl
scott@SCOTT-PC:/mnt/c/Users/scott/Documents$ echo $PATH
/usr/local/texlive/2020/bin/x86_64-linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/system32:...
Run Code Online (Sandbox Code Playgroud)
为什么这两条路径有差异?是否可以更改第一个 PATH 变量?
Not*_*1ds 16
说实话,当我第一次看到这个问题时,我认为这个问题很容易回答。哦,我错了。它的工作原理有很多细微差别。
不过,让我们从相当“简单”的部分开始。第一种方法和第二种方法的主要区别:
wsl
本身启动到登录(和交互式)shellwsl echo $PATH
既不是登录 shell,也不是交互式 shell因此,第一个将获取登录脚本(例如~/.profile
)和交互式启动脚本(例如~/.bashrc
)。第二种形式无法获取其中任何一个的来源。
您可以使用以下命令以不同的方式查看此问题(并找到解决方案):
wsl -e bash -c 'echo $PATH'
wsl -e bash -li -c 'echo $PATH'
强制-li
bash 作为登录和交互式 shell 运行,从而获取所有适用的启动脚本。而且,正如 @bovquier 在评论中指出的那样,这里需要一个单引号,以防止 PowerShell 在$
到达 Bash 之前插入 。那,或者逃避它。
您应该能够以相同的方式运行 TeX Live,只需将“echo $PATH”替换为 TeX Live 所需的启动命令即可。
第二个选项是创建一个既添加路径又运行命令的脚本,然后通过以下方式启动该脚本wsl /path/to/script.sh
也就是说,老实说,我不认为您当前的登录/交互路径来自/etc/environment
. 至少在我的测试中,/etc/environment
它在 WSL 中没有用处,这是可以预料的。 /etc/environment
仅由 PAM 模块提供来源,并且 WSL 不执行登录检查,因此没有理由在命令或wsl
命令中调用 PAM wsl echo $PATH
。
我希望您仍然有 PATH 设置~/.bashrc
或类似的位置),这就是 shell 目前从中获取它的位置。
虽然这对于理解答案不一定很重要,但您可能还会想,如果/etc/environment
不是用于在 WSL 中设置默认(非登录、非交互)路径,那么什么是?答案似乎是它被硬编码到init
启动 WSL 中。这init
也是附加 Windows 路径的内容(假设您没有在 中禁用该功能/etc/wsl.conf
)。
归档时间: |
|
查看次数: |
2024 次 |
最近记录: |