[英]Merge one-line texts into a data-frame with basic ubuntu shell commands
[英]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(例如bash
和zsh
)都使用符号$
来引用变量。
由于您希望WSL 端 shell解释变量$PATH
,因此您必须防止PowerShell 预先扩展它; 您可以选择性地执行我的操作`
- escaping $
字符或 - 更简单 - 通过将$PATH
包含在逐字(单引号)字符串( '...'
)中:
wsl --user vanyle -- echo '$PATH'
注意:如果您想传递多个命令和/或需要shell 功能,例如>
,使用-e
选项并显式调用您的 shell 可执行文件(例如bash
或zsh
),将命令行作为单个字符串传递给它会更简单-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.