Чи є еквівалент програми CMD для Windows CME оболонки Unix?


9

Чи є еквівалент у Windows "exec" Unix Shell? В основному, мені потрібно уникати форсування нового процесу, щоб зберегти вхідні / вихідні труби, а також ідентифікатор процесу.

Редагувати:

Отже, ось моя проблема. У мене є процес A, який запускає скрипт, і цей сценарій закінчується виконанням процесу B. Мені потрібно, щоб A отримав весь вихід B, а також міг вбити B, убивши процес, який він породив (сценарій) .

У Unix виконання B з execвиконує цю роботу.


Не існує еквівалента, принаймні, не використовуються стандартні команди та програми Windows.
Джон Гарденєр

Якщо ви намагаєтеся запустити виконуваний файл, а не інший пакетний файл, способу цього зробити не існує (підтримується / реалістично). Однак канали вводу / виводу зазвичай успадковуються програмами, що працюють у пакетному файлі. Якщо ви можете описати, чому ви хочете це зробити, ми можемо запропонувати альтернативи.
Гаррі Джонстон,

Процес A вже повинен отримати весь вихід B, якщо сценарій не перекриє це. Це не працює?
Гаррі Джонстон,

За допомогою API Win32 можна домовитись про те, щоб дочірній процес загинув під час батьківського процесу, проте немає вбудованого параметра командного рядка AFAIK. Якщо я надаю вихідний код (для Visual C ++), чи можете ви його створити?
Гаррі Джонстон,

@Harry Я розгалужую сценарій з Java, тому, якщо ідея полягає в тому, щоб процес A використовувати той Win32 API, я боюся, що це навряд чи вдасться, хоча я вдячний за зусилля. Краще просто пояснити це неможливо, і я прийму це як відповідь.
Даніель К. Собрал

Відповіді:


7

АФАІК там немає. Windows не вистачає execv(), як це робить bash exec. callпрацює для виклику пакетних файлів (просто, просто інтерпретуйте файл у поточному інтерпретаторі, подібно до .команди bash ), але не для exes.

Це унеможливлює написання скриптів для обгортки однолінійних скриптів будь-якою мовою в Windows. Ви завжди отримаєте те, що "Закінчити пакетну роботу?" лайно на Ctrl + C і вбивство пакетного процесу (не з Ctrl + C, за словами менеджера завдань) не вбиває дочірнього процесу. Зараз я шукаю файл шаблону C для цього обгортання.

ОНОВЛЕННЯ: Windows має _execv()свій шар сумісності POSIX у MSVCRT, але AFAIK (ще не перевіряв його) - це просто обгортка, CreateProcessтому він завжди створюватиме новий процес, він не може замінити поточний процес.


2

Я думаю, що дзвінок робить те, що ти хочеш, але я не впевнений на 100%.


4
Якщо ви хочете запустити один пакетний файл з іншого, не запускаючи новий екземпляр cmd.exe, виклик - це правильна відповідь.
Гаррі Джонстон

1

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

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%

це не робить нічого подібного exec...
Jakuje

-1
  • Виконати batch-файли :call
  • Виконати exe-файли : команда не потрібна, викликайте її безпосередньо/path/to/exe/something.exe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.