使用 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,如何传递包含空格的测试参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Powershell 中的快照创建 Azure 托管磁盘
如何使用 Python 中的参数运行 PowerShell 脚本
如何使用 powershell 中的 sqlplus 运行 .sql 文件