Обработка эффектов в среде оболочки с помощью системы сборки 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
как черный ящик, есть два варианта:
- Запустите обе команды за один шаг. Что-то вроде:
Stdout out <- cmd Shell (Cwd dir) "path/to/script.cmd" arg1 arg2 "&& env/dependent/command.cmd"
, - Захватите среду из первой команды и передайте ее второй. Вы можете захватить окружающую среду, запустив
path/to/script.cmd .... && set
, захватив это сStdout
разбор, а затем снабдив егоEnv
,
Если вы хотите повторно использовать Env
более одного раза второй, вероятно, быстрее, но оба должны работать.
Отработанная реализация второго подхода, в том числе set
парсер вывода, доступен здесь (автор @fakedrake).