gpt4 book ai didi

powershell - Powershell Bash/Zsh 命令中的多参数

转载 作者:行者123 更新时间:2023-12-03 01:27:32 24 4
gpt4 key购买 nike

无法在 Powershell 中运行以下 Bash/Zsh 命令:

$KeyPath = Join-Path -Path $this.Plate -ChildPath "install/tekton.key"
kubectl create secret docker-registry regcred `
--docker-server="https://gcr.io" `
--docker-username=_json_key `
--docker-email="name@org.iam.gserviceaccount.com" `
--docker-password="$(cat $KeyPath)"

我得到错误:

error: exactly one NAME is required, got 5
See 'kubectl create secret docker-registry -h' for help and examples

如果我直接在 bash 中运行此命令,它会起作用:

kubectl create secret docker-registry regcred --docker-server="https://gcr.io" --docker-username=_json_key --docker-email="name@org.iam.gserviceaccount.com" --docker-password="$(cat ./tekton.key)"

最佳答案

我不知道这是否是您问题的原因,但有两个潜在问题:

  • 包含空格的扩展值会导致 PowerShell 在后台重建命令行时(在 Windows 上)将参数作为一个整体进行双引号 :

    • 例如,如果 $(cat $KeyPath) ($(Get-Content $KeyPath)) 扩展为 一二,PowerShell 在幕后传递 "--docker-password=one two"不是 --docker-password="one two" .

    • 这是否会改变参数的含义取决于目标程序如何解析其命令行 - 我不知道 kubectl 做了什么。

      • 如果您确实需要解决此问题,请使用 `` ```(反引号,PowerShell 的转义字符,使 PowerShell 在原始语法形式:

        • --docker-password=`"$(cat ./tekton.key)`"
      • 请注意 - 与类似 POSIX 的 shell(例如 Bash 和 Zsh)不同 - 您通常"..." 中包含变量引用或子表达式> 为了安全通过它;例如,--foo=$someVar--foo=$(Get-Date) 工作正常,即使 $someVar 或输出Get-Date 包含空格或通配符。

  • 如果文件 $KeyPath 包含多行,这些行将用空格连接参数:

    • 例如,如果文件包含"a`nb`n"("`n" 是换行符),PowerShell 将通过
      "--docker-password=ab".

    • 相比之下,类似 POSIX 的 shell(例如 Bash 或 Zsh)将保留内部换行符,同时修剪(任意数量的)尾随换行符。 p>


附带说明:PowerShell 对传递给外部程序的参数中的嵌入式双引号 的处理已损坏 - 请参阅 this answer .

关于powershell - Powershell Bash/Zsh 命令中的多参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com