我需要在 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 -s
和uname -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 -s
和 uname -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/