簡體   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