[英]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.