Docker 如何在使用Linux容器的Windows 10 PC上运行printf命令?

Docker 如何在使用Linux容器的Windows 10 PC上运行printf命令?,docker,kubernetes,Docker,Kubernetes,我看到了SQL Server 2017的掌舵图: 它看起来很有用。因此,我遵循了说明: helm安装——名称mymssqlstable/mssqllinux——set acceptEula.value=Y——set edition.value=Developer 这与预期一样有效,即它下面的kubectl命令返回预期结果。然后它说: printf$(kubectl get secret——名称空间默认的mymssql-mssql-linux secret-o jsonpath=“{.data.s

我看到了SQL Server 2017的掌舵图:

它看起来很有用。因此,我遵循了说明:

  • helm安装——名称mymssqlstable/mssqllinux——set acceptEula.value=Y——set edition.value=Developer

    这与预期一样有效,即它下面的
    kubectl
    命令返回预期结果。然后它说:

  • printf$(kubectl get secret——名称空间默认的mymssql-mssql-linux secret-o jsonpath=“{.data.sapassword}”| base64——解码);回声

  • 我已经在命令提示符和Powershell中运行了它,它只是说printf无法识别(正如我所预料的那样)。如何在使用Linux容器的Windows 10 PC上运行printf命令


    我已经花了很多时间来搜索它,它告诉我PrtTf是一个C++函数。如何执行步骤2?

    所需数据由
    $()
    中的
    kubectl
    命令打印

    base 64解码可以通过Go模板在
    kubectl
    自身内完成,而不是通过管道将
    kubectl
    输出传输到
    base64
    (如果未安装,windows上可能不存在)

    示例命令中的
    printf
    /
    echo
    添加似乎是多余的,或者至少是在输出后获得换行符的一种糟糕方法。如果您发现需要在Windows上的输出末尾添加新行,请使用以下模板

    '{{.data.sapassword | base64decode}}{{ "\n" }}'
    

    这实际上是printf的一个错误用法——按照预期使用它的人不应该将数据放在格式字符串字段中……所以,问题是为什么在那里使用printf。一种可能性是,其目的是在被提取的密码中扩展反斜杠转义序列——如果没有,您可以忽略它,只需担心翻译命令的其余部分。另一种可能是,它被用作一种相当昂贵且会产生副作用的方式来剥离换行符。(base64编码内容中不应该有任何反斜杠转义序列!)@Charles Duffy,我如何获得sa密码?然后,我可以使用SQL Studio管理器公开pod并连接到它……顺便说一句,使用printf扩展转义序列的正确方法是使用
    printf“%b'”$(…在此处使用序列生成内容的代码…)
    ,如果要使用尾随换行符,则将其改为
    “%b\n”
    。您能看看我的问题吗(类似):。请看问题的最后一句。
    '{{.data.sapassword | base64decode}}{{ "\n" }}'