powershell - 从 powershell 执行时,WSL 无法识别 "uname -s"之类的命令

标签 powershell environment-variables ubuntu-18.04 windows-subsystem-for-linux

我需要在 WSL 中执行以下命令:

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

为了从 powershell 执行它,我尝试运行:

Ubuntu1804 run "sudo curl -L 'https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose"

但是由于找不到uname -suname -m 的值而出现错误

uname : The term 'uname' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:107
+ ... ocker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(u ...
+                                                             ~~~~~
    + CategoryInfo          : ObjectNotFound: (uname:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

但以下命令有效,因为我在该命令中手动输入了 uname -suname -m 的值。

 Ubuntu1804 run "sudo curl -L 'https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64' -o /usr/local/bin/docker-compose"

谁能帮我找到在使用 powershell 时,如何将一些命令的结果合并到另一个命令并在 WSL 中执行它?

此外,我如何在 WSL 命令中合并环境变量(如 $USER)的值并从 powershell 执行?

最佳答案

问题是命令参数中的子表达式 $( )。 PowerShell 在表达式模式下解释这些(因为允许扩展的双引号)并在将参数传递给 Ubuntu1804 之前寻找名为 uname 的可执行文件。

解决方案:

  • 运行后使用停止解析器运算符:--%

  • 翻转你的引号,这样扩展就不会发生:... 'sudo curl -L "...

  • 转义子表达式:`$`(`)

回答如何在 WSL 命令中包含环境变量:

& Ubuntu1804.exe ... $Env:USER ...

about_Parsing

about_Environment_Variables

关于powershell - 从 powershell 执行时,WSL 无法识别 "uname -s"之类的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260630/

相关文章:

macos - 在 OS X 上设置环境变量

django - 用于 Django 部署的 Azure Web 应用程序不起作用

azure - 如何在Azure中为应用程序服务设置环境变量

python - 使用 ROCM 在 Ubuntu 18.04 上不支持 rx 470/vega 8 OpenCL/HSA

Android 模拟器在 Ubuntu 18.04 上因 SIGSEGV 而崩溃

powershell - 使用 Powershell Match 匹配变量

Powershell 阻止 UTF8 转换

docker - 更新docker(18.09.0)会导致错误

powershell - 新创建的响应组工作流未列出

powershell - Powershell Windows窗体按钮链接