Я пытаюсь запустить серию команд оболочки с Perl6 для переменной $cmd
, которая выглядит как
databricks jobs run-now --job-id 35 --notebook-params '{"directory": "s3://bucket", "output": "s3://bucket/extension", "sampleID_to_canonical_id_map": "s3://somefile.csv"}'
- Разделение команды на все после
notebook-params
my $ cmd0 = 'Задания для работы с базами данных - сейчас -job-id 35 --notebook-params';my $ args = "'{\" directory \ ": \" $ in-dir \ ", \" output \ ": \" $ out-dir \ ", \" sampleID_to_canonical_id_map \ ": \" $ map \ "}«";my $ run = run $ cmd0, $ args,: err,: out;
Сбой.Никакого ответа не дали ни Databricks, ни оболочка.Stdout и stderr пусты.
Разделение всей команды по пробелам
my @cmd = $ cmd.split (/ \ s + /);my $ run = run $ cmd,: err,: out
Ошибка: получены неожиданные дополнительные аргументы ("s3: // bucket", "output": "s3:// bucket / extension "," sampleID_to_canonical_id_map ":" s3: //somefile.csv "} '
Передача команды в виде строки my $ cmd = "$ cmd0 \" $ in-dir \ ", \" output \ ": \" $ out-dir \ ", \" sampleID_to_canonical_id_map \ ": \" $ map\ "} '";
снова, stdout и stderr пусты.Код выхода 1.
это то, что run
может принимать только массивы, а не строки (мне интересно, почему)
Если я скопирую и вставлю команду, которая была переданаPerl6 run
, он работает, если он дан из оболочки.Это не работает, когда передается через perl6.Это нехорошо, потому что я должен выполнить эту команду сотни раз.
Возможно, оболочка Perl6 https://docs.perl6.org/routine/shell будет лучше?Я не использовал это, потому что руководство предполагает, что run
безопаснее.Я хочу записать как stdout, так и stderr в Proc
class
EDIT: я запустил это с shell
, но столкнулся с другими проблемами, не связанными с тем, что я первоначально опубликовал.Я не уверен, если это квалифицируется как ответ тогда.Я просто решил использовать backticks с perl5.Да, обратные пометки устарели, но они выполняют свою работу.