Executando cmd.exe a partir do Cygwin

16

Gostaria de usar o Cygwin para meu shell principal no trabalho, mas meu grupo usa arquivos em lote para vários processos. Disseram-me que posso fazer isso cmd /c batch.batpara executar o arquivo em lotes do Cygwin. Isso funciona para alguns casos, e não para outros. Um dos arquivos em lote falha completamente quando faço isso, mas funciona bem quando eu o executo no shell do cmd.

Outra estranheza que notei é que, se eu correr cmd /?do Cygwin, não recebo saída. Executar isso a partir do shell do cmd fornece a ajuda padrão. Mesmo fazendo cmd /c cmd /?não fornece saída. Se eu corro cmddo Cygwin, ele fornece o cmd shell e, se eu corro cmd /?, recebo o texto de ajuda, mas sem as quebras de página.

Acho que a próxima coisa a tentar é encontrar uma maneira de realmente iniciar o cmd dentro de sua própria janela distinta, como se você tivesse ido para Iniciar-> Executar e digitado "cmd". Existe uma maneira de fazer isso no Cygwin?

Ryan Fox
fonte

Respostas:

8

/?é tratado como um padrão por bash, onde o ponto de interrogação se encaixa em um único caractere; portanto, se você tiver arquivos ou diretórios de uma letra na raiz do Cygwin, o padrão será substituído por esses. echo /?irá mostrar se é isso que está acontecendo. Você pode escapar do ponto de interrogação com uma barra invertida: /\?. Ou citar todo o argumento: '/?'.

cygstart c:/windows/system32/cmd irá iniciar o cmd.exe em sua própria janela.

ak2
fonte
no meu Win XP SP2 latop este seguinte trecho de código funcionaria: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao
14

Você pode executar um arquivo em lotes diretamente do shell Cygwin, nem precisa da chamada intermediária cmd. Se o arquivo em lotes exigir argumentos, eles deverão ser citados da maneira do Windows; pode ser mais simples de executar cmd /c 'foo.bat "quoted arguments"'.

Você não diz em qual terminal está executando o shell. Os arquivos em lote por si só não se importam com isso, mas os comandos executados a partir dos arquivos em lote podem. Os emuladores de terminal Cygwin não emulam os consoles do Windows; portanto, eles são bons para os programas Cygwin e para programas somente stdio, mas não para os programas de console do Windows.

Se normalmente executar shells Cygwin em um terminal Cygwin (como rxvt ou mintty), você poderá executar os arquivos em lotes de problemas em um console separado do Windows start foo.bat. Convém executar o Console2 como um substituto melhor para o console do Windows e executar aplicativos do console do Windows nos aplicativos Console2 e Cygwin em um terminal Cygwin (ou mesmo no Console2).

cmd /?é um arenque vermelho: presumivelmente há diretórios com um caractere no diretório raiz do Cygwin; portanto, o shell se expande /?e executa cmdcom opções que, por acaso, não produzem saída.

Gilles 'SO- parar de ser mau'
fonte
Eu precisava colar variáveis ​​de shell nos argumentos do cmd, então achei que o seguinte poderia solucionar os analisadores Bash e cmd: u = 'DOMAIN \ ACC' p = 'X <12' r = '{Baz 3.1 5-x - (TTT )} 'd = $' \ "'cmd / c foo.bat -u% d %% u %% d% -p% d %% p %% d% -fooBar% d %% r %% d% - fooBAR true
eel ghEEz