繁体   English   中英

单行传递命令时 WSL $PATH 为空

[英]WSL $PATH is empty when passing commands in one-line

Windows 11,在线使用WSL 2(Ubuntu20.04LTS)时,使用wsl -- command ,我的PATH变量为空,找不到安装的程序。 我正在编写一个 Powershell 脚本,我想在一行脚本中运行 linux 命令,但是这个 PATH 问题阻止我这样做。

使用--运行 WSL 时,我得到以下信息:

λ wsl --user vanyle -- echo $PATH

λ wsl --user vanyle -- python
zsh:1: command not found: python
λ wsl -- python
zsh:1: command not found: python

但是如果我第一次登录 WSL,一切正常。

λ wsl
WSL-ZSH /mnt/c/Users/vanyle/
λ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib
WSL-ZSH /mnt/c/Users/vanyle/
λ python
Python 3.8.10 (default, Mar 25 2022, 14:53:42)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

PowerShell 和 POSIX 兼容的 shell(例如bashzsh )都使用符号$来引用变量。

由于您希望WSL 端 shell解释变量$PATH ,因此您必须防止PowerShell 预先扩展它 您可以选择性地执行我的操作` - escaping $字符或 - 更简单 - 通过将$PATH包含在逐字(单引号)字符串( '...' )中

wsl --user vanyle -- echo '$PATH'

注意:如果您想传递多个命令和/或需要shell 功能,例如> ,使用-e选项显式调用您的 shell 可执行文件(例如bashzsh ),将命令行作为单个字符串传递给它会更简单-c选项; 例如:

wsl --user vanyle -e bash -c 'echo $PATH; date'

注意:使用-c选项调用 POSIX 兼容的 shell 以非交互式执行命令不会导致配置文件或初始化文件,例如~/.bash_profile~/.bashrc~/.zshrc - 默认情况下会发生这种情况仅在输入交互式shell session 时(既不传递-c参数也不传递 shell 脚本路径)。

要获得与交互式session 中相同的 shell 环境,还要传递-i-l选项; 例如:

wsl --user vanyle -e zsh -ilc 'echo $PATH; date'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM