使用 Powershell 中的 Stack,如何传递包含空格的测试参数?

Posted

技术标签:

【中文标题】使用 Powershell 中的 Stack,如何传递包含空格的测试参数?【英文标题】:Using Stack from Powershell, how do I pass test arguments that include a space? 【发布时间】:2019-07-02 05:11:52 【问题描述】:

在堆栈外运行可口测试时,我需要将字符串“失败日志”作为可口模式参数传递。

这在 bash 中非常简单:

PS C:\Pyrethrum> stack test --fast --ta "-p \"fail log\""

但是尝试使用 Powershell 来达到同样的效果让我抓狂:


PS C:\Pyrethrum> stack test --fast --ta "-p ""fail"" "

在没有空间时工作(运行测试)


PS C:\Pyrethrum> stack test --fast --ta "-p ""fail log"" "

解析目标错误:找不到目录:日志


PS C:\Pyrethrum> stack test --fast --ta "-p `"fail log`""

尝试安装一个名为 log 的包


PS C:\Pyrethrum> stack test --fast --ta "-p \"fail log\""

选项--ta:未终止的字符串:endOfInput


PS C:\Pyrethrum> stack test --fast --ta "-p /fail log/ "

...构建但模式需要引号

pyrethrum-0.1.0.0:测试(套件:除虫菊测试,参数:-p /fail log/)

选项 -p:无法解析模式


在 Powershell 中运行它的正确命令行是什么?

【问题讨论】:

How to run an EXE file in PowerShell with parameters with spaces and quotes的可能重复 在数组中传递参数。 【参考方案1】:

不幸的是,PowerShell 将参数传递给外部程序的方式被破坏了,并且要求您不仅要满足 PowerShell自己的关于嵌入式 " 的语法要求,还要满足另外为目标可执行文件转义它们,通常使用\

 # `" is needed for PowerShell, \ is needed for stack
 stack test --fast --ta "-p \`"fail log\`""

由于您的外部 "..." 字符串不引用任何 PowerShell 变量并且不包含子表达式,即,由于不需要字符串插值,因此您可以使用 '...',一个文字 PowerShell 字符串,这会稍微简化一些事情:

 stack test --fast --ta '-p \"fail log\"'

简而言之:从 PowerShell 将 " 字符嵌入参数中传递给 外部程序

"..." 内使用\`"'...' 内使用\"

详情请见this GitHub issue。

【讨论】:

以上是关于使用 Powershell 中的 Stack,如何传递包含空格的测试参数?的主要内容,如果未能解决你的问题,请参考以下文章

Azure Stack实验和测试资源

如何使用 Powershell 中的快照创建 Azure 托管磁盘

如何使用 Python 中的参数运行 PowerShell 脚本

如何使用 powershell 中的 sqlplus 运行 .sql 文件

如何使用powershell将文本($)替换为文本文件中的引号

如何使用 cmd / powershell 对文件夹中的所有程序执行 taskkill