Обработка эффектов в среде оболочки с помощью системы сборки Shake

Я запускаю Bash на Windows (не новенькая вещь на Windows 10, Mingw Bash) и оттуда shake, Из того, что я понимаю, можно командой по windows редактировать среду cmd, В моем случае я не хочу делать предположения о том, как будет изменена среда, я просто хочу, чтобы следующая команда выполнялась в этой измененной среде. Это возможно?

Идеальный сценарий был бы что-то вроде

(Environment env, Stdout out) <- cmd Shell (Cwd dir) "path/to/script.cmd" [arg1] [arg2]
-- Do stuff with out
cmd Shell (Cwd dir) (Env env) "env/dependent/command.cmd"

Я также был бы рад запустить обе команды в одной и той же оболочке, даже если это означает, что я не могу Do stuff with out но я не мог понять, как это сделать либо

Я думаю, в терминах makefile то, что я хочу, похоже на .ONESHELL:

1 ответ

Решение

Каждый cmd Вызов в Shake является отдельным, поэтому любые переменные окружения не сохраняются. Предполагая, что вы хотите лечить script.cmd как черный ящик, есть два варианта:

  1. Запустите обе команды за один шаг. Что-то вроде: Stdout out <- cmd Shell (Cwd dir) "path/to/script.cmd" arg1 arg2 "&& env/dependent/command.cmd",
  2. Захватите среду из первой команды и передайте ее второй. Вы можете захватить окружающую среду, запустив path/to/script.cmd .... && set, захватив это с Stdoutразбор, а затем снабдив его Env,

Если вы хотите повторно использовать Env более одного раза второй, вероятно, быстрее, но оба должны работать.

Отработанная реализация второго подхода, в том числе set парсер вывода, доступен здесь (автор @fakedrake).

Другие вопросы по тегам