В настоящее время я столкнулся с проблемой Bobby Tables болота, но среда - это Chef + Ruby + powershell.Как избежать аргументов команды powershell при вызове из Ruby/Chef?
Все solutionsI've seen пока что неадекватны: они окружают аргументы кавычками, но не полностью избегают аргументов. Shellwords и shellescape выглядят многообещающими, но они кажутся специфичными для bash.
Например, я могу хотеть построить в Chef этого окно командной оболочки:
.\foo.exe BAR="#{node['baz']}"
Обобщая из SQL Дева мира я наивно предугадывать интерфейсное что-то вроде этого:
cmd = "foo.exe BAR=?"
args = (node['baz'])
run-command(cmd, args)
Где run-command
справится с любыми аргументами. Вместо этого я вижу интерфейсы, которые напоминают мне о плохих старых SQL-днях, когда разработчикам приходилось строить SQL как строку и избегать любых аргументов «вручную».
Любые указания на лучшие практики о том, как действовать? Использовать system? Благодаря!
Редактировать: чтобы быть ясным, можно предположить, что аргумент baz
включает произвольный текст, включая, возможно, любую комбинацию символов. Подумайте об этом как о идентичном задаче Bobby Tables.
Скорее всего, вам не нужно слишком стараться. Посмотрите, поможет ли вам эта статья (http://windowsitpro.com/powershell/running-executables-powershell). –
Спасибо за ссылку @Bill_Stewart. К сожалению, эта статья, по-видимому, полностью касается пробелов в аргументах, и ее решение состоит в том, чтобы заключить их в двойные кавычки. – jotr
Вы можете использовать утилиту командной строки 'showargs.exe' в загрузке, чтобы увидеть фактическую командную строку, которую создает PowerShell. –