Я - огромный сторонник централизованного управления исходным кодом по большому количеству причин, но я действительно пробовал BitKeeper на проекте кратко. Возможно, после лет использования централизованной модели в одном формате или другом (По необходимости, Подрывная деятельность, CVS) я просто нашел распределенное управление исходным кодом трудным использовать.
я имею мышление, что наши инструменты никогда не должны мешать фактической работе; они должны сделать работу легче. Так, после нескольких голов, загоняющих события, я взял на поруки. Я советовал бы делать некоторые действительно выносливые тесты с Вашей командой прежде, чем раскачивать лодку, потому что модель очень отличается, чем, к чему, вероятно, приучено большинство devs в мире SCM.
Если он находится в cmd.exe
, использование временного файла - единственный вариант, [который мне известен]:
python -c "print(\"Hi\")" > temp.cmd
call temp.cmd
del temp.cmd
(Делаем некоторые предположения, где детали вашего вопроса отсутствуют)
В CMD, когда пакетный сценарий изменяет среду, поведение по умолчанию таково, что он изменяет среду процесса CMD, который выполняет это.
Теперь, если у вас есть пакетный сценарий, который вызывает другой пакетный сценарий, есть 3 способа сделать это.
Выполнить пакетный файл напрямую:
REM вызов q.bat q.bat REM эта линия никогда не запускаетсяОбычно вы этого не хотите, потому что он не вернется к вызывающему пакетному сценарию. Это больше похоже на
goto
, чем на gosub
. Процесс CMD просто переключается с одного сценария на другой. выполняется с помощью вызова
:
REM вызов q.bat ПОЗВОНИТЬ q.bat Здесь появятся изменения REM, на которые влияет q.bat.Это наиболее распространенный способ вызова из одного командного файла другого. Когда
q.bat
завершится, управление вернется к вызывающему. Поскольку это тот же процесс CMD, изменения в среде все равно будут.
q.bat
использует оператор EXIT
, это может привести к завершению процесса CMD без возврата управления вызывающему сценарию. q.bat
использует EXIT / B
, тогда процесс CMD не завершится. Это полезно для установки УРОВЕНЬ ОШИБКИ
. Выполнить в новом процессе CMD:
REM вызов q.bat CMD / C q.bat Изменения среды REM в q.bat не влияют на меняПоскольку q.bat запускает новый процесс CMD, он влияет на среду этого процесса, а не на CMD, в которой работает вызывающий.
q.bat
использует EXIT
, он не прервет процесс вызывающего. Команда SETLOCAL
CMD создаст новое окружение для текущего скрипта. Изменения в этой среде не повлияют на вызывающего абонента. В общем, SETLOCAL
является хорошей практикой, чтобы избежать случайной утечки изменений среды.
Чтобы использовать SETLOCAL
и по-прежнему отправлять изменения среды в вызывающий сценарий, завершите сценарий:
ENDLOCAL && SET X=%X% && SET Y=%Y%
При этом значения X и Y будут переданы в родительскую среду.
Если, с другой стороны, вы хотите запустить другой процесс (не сценарий CMD), и он повлияет на среду текущего сценария, тогда используйте инструмент сгенерируйте пакетный файл, который вносит необходимые изменения, а затем выполните этот пакетный файл.
REM q.exe will write %TEMP%\runme.cmd, which looks like: REM set X=Y q.exe call "%TEMP%\runme.cmd"