Назад | Перейти на главную страницу

Есть ли Windows CMD-эквивалент exec оболочки Unix?

Есть ли в Windows эквивалент "exec" Unix Shell? По сути, мне нужно избегать разветвления нового процесса, чтобы сохранить каналы ввода / вывода, а также идентификатор процесса.

Редактировать:

Итак, вот моя проблема. У меня есть процесс A, который запускает скрипт, и этот скрипт заканчивается выполнением процесса B. Мне нужно, чтобы A получил весь вывод B, а также смог убить B, убив процесс, который он породил (скрипт) .

В Unix выполнение B с exec делает эту работу.

AFAIK нет. Windows не хватает execv() вот как это делает bash exec. call работает для вызова командных файлов (просто, просто интерпретируйте файл в текущем интерпретаторе, аналогично bash . команда), но не для бывших.

Это делает невозможным написание однострочных сценариев-оболочек для сценариев на любом языке в Windows. Вы всегда будете получать сообщение «Прервать пакетное задание?» дерьмо на Ctrl + C и убийство пакетного процесса (не с помощью Ctrl + C, скажем из диспетчера задач) не убьет дочерний процесс. Сейчас я ищу файл шаблона C для этой упаковки.

ОБНОВЛЕНИЕ: в Windows есть _execv() на уровне совместимости с POSIX в MSVCRT, но AFAIK (не тестировал его), это просто оболочка вокруг CreateProcess поэтому он всегда будет создавать новый процесс, он не может заменить текущий процесс.

думаю вызов делает то, что вы хотите, но я не уверен на 100%.

Вы можете создать динамическую пакетную команду и выполнить ее на основе результатов предыдущих операций. Я не уверен, что это было бы решением в вашем случае, но следующий код работает нормально.

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%
  • Выполнить пакетные файлы: call
  • Выполнить exe-файлы: Команда не требуется, вызовите ее напрямую /path/to/exe/something.exe