Эквивалентный оценке Unix в Windows

Я - огромный сторонник централизованного управления исходным кодом по большому количеству причин, но я действительно пробовал BitKeeper на проекте кратко. Возможно, после лет использования централизованной модели в одном формате или другом (По необходимости, Подрывная деятельность, CVS) я просто нашел распределенное управление исходным кодом трудным использовать.

я имею мышление, что наши инструменты никогда не должны мешать фактической работе; они должны сделать работу легче. Так, после нескольких голов, загоняющих события, я взял на поруки. Я советовал бы делать некоторые действительно выносливые тесты с Вашей командой прежде, чем раскачивать лодку, потому что модель очень отличается, чем, к чему, вероятно, приучено большинство devs в мире SCM.

10
задан johannix 28 July 2009 в 19:42
поделиться

2 ответа

Если он находится в cmd.exe , использование временного файла - единственный вариант, [который мне известен]:

python -c "print(\"Hi\")" > temp.cmd
call temp.cmd
del temp.cmd
8
ответ дан 4 December 2019 в 01:02
поделиться

(Делаем некоторые предположения, где детали вашего вопроса отсутствуют)

В CMD, когда пакетный сценарий изменяет среду, поведение по умолчанию таково, что он изменяет среду процесса CMD, который выполняет это.

Теперь, если у вас есть пакетный сценарий, который вызывает другой пакетный сценарий, есть 3 способа сделать это.

  1. Выполнить пакетный файл напрямую:

     REM вызов q.bat
    q.bat
    REM эта линия никогда не запускается
    
    Обычно вы этого не хотите, потому что он не вернется к вызывающему пакетному сценарию. Это больше похоже на goto , чем на gosub . Процесс CMD просто переключается с одного сценария на другой.
  2. выполняется с помощью вызова :

     REM вызов q.bat
    ПОЗВОНИТЬ q.bat
    Здесь появятся изменения REM, на которые влияет q.bat.
    
    Это наиболее распространенный способ вызова из одного командного файла другого. Когда q.bat завершится, управление вернется к вызывающему. Поскольку это тот же процесс CMD, изменения в среде все равно будут.

    Примечание. Если q.bat использует оператор EXIT , это может привести к завершению процесса CMD без возврата управления вызывающему сценарию.


    Примечание 2: Если q.bat использует EXIT / B , тогда процесс CMD не завершится. Это полезно для установки УРОВЕНЬ ОШИБКИ .
  3. Выполнить в новом процессе 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"
3
ответ дан 4 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: