Existe um equivalente Windows CMD do exec do Unix shell?

9

Existe algum equivalente no Windows para o "exec" do Unix Shell? Basicamente, eu preciso evitar um novo processo, para que os canais de entrada / saída sejam preservados, assim como o ID do processo.

Editar:

Então, aqui está o meu problema. Eu tenho um processo A que inicia um script, e este script termina executando um processo B. Preciso que A obtenha toda a saída de B, assim como seja capaz de matar B matando o processo que gerou (o script) .

No Unix, executar B com exec faz esse trabalho.

    
por Daniel C. Sobral 24.09.2011 / 06:42

3 respostas

7

AFAIK não existe. O Windows não possui execv() , que é como o bash exec faz isso. call funciona para chamar arquivos em lote (fácil, basta interpretar o arquivo no interpretador atual, semelhante ao comando . do bash), mas não para exes.

Isso torna impossível escrever scripts de wrapper de uma linha para scripts em qualquer idioma no Windows. Você sempre obterá esse "trabalho de lote de término"? porcaria em Ctrl + C e matando o processo em lote (não com Ctrl + C, do gestor de tarefas, digamos) não vai matar o processo filho. Agora estou procurando um arquivo de modelo C para fazer essa quebra automática.

ATUALIZAÇÃO: O Windows possui _execv() em sua camada de compatibilidade POSIX em MSVCRT, mas o AFAIK (não o testou) é apenas um wrapper em torno de CreateProcess , portanto sempre criará um novo processo, não poderá substituir o atual processo.

    
por 15.01.2014 / 11:24
3

Acho que ligue faz o que você quer, mas eu não tenho 100% de certeza.

    
por 24.09.2011 / 07:59
1

Você pode construir um comando em lote dinâmico e executá-lo com base na saída de operações anteriores. Não tenho certeza se isso seria uma solução no seu caso, mas o código a seguir funciona bem.

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%
    
por 20.03.2016 / 19:16