Используя Stack из Powershell, как передать тестовые аргументы, содержащие пробел? - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно передать строку «журнал ошибок» в качестве полезного аргумента шаблона при запуске вкусных тестов вне стека.

Это довольно просто в 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"" "

Ошибка при разборе целей: каталог не найден: 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: test (suite: pyrethrum-test, args: -p / faillog /)

параметр -p: невозможно проанализировать шаблон


Какая правильная командная строка позволяет запустить ее в Powershell?

1 Ответ

0 голосов
/ 08 февраля 2019

К сожалению, способ, которым 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:

  • использование \`" внутри "..."
  • использование \" внутри '...'

Подробнее см. в этом выпуске GitHub .

...