Executando o cmd.exe de dentro do Cygwin

14

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

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

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

    
por Ryan Fox 15.09.2010 / 20:22

2 respostas

7

/? é tratado como um padrão pelo bash, onde o ponto de interrogação vai caber em um único caractere, então se você tiver algum arquivo ou diretório de uma letra em sua raiz Cygwin, o padrão será substituído por eles. echo /? mostrará se é isso que está acontecendo. Você pode escapar do ponto de interrogação com uma barra invertida: /\? . Ou cite o argumento inteiro: '/?' .

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

    
por 15.09.2010 / 23:04
10

Você pode executar um arquivo em lote a partir de um shell Cygwin diretamente, você nem precisa da chamada intermediária para cmd . Se o arquivo em lote requer argumentos, eles precisam ser citados na moda do Windows; pode ser mais simples executar cmd /c 'foo.bat "quoted arguments"' .

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

Se normalmente executar shells Cygwin em um terminal Cygwin (como rxvt ou mintty), você pode executar os arquivos batch com problemas em um console separado do Windows com start foo.bat . Você pode querer executar Console2 como um substituto melhor para o console do Windows e executar aplicativos de console do Windows nos aplicativos Console2 e Cygwin em um Terminal Cygwin (ou mesmo no Console2).

cmd /? é um arenque vermelho: há presumivelmente diretórios de um caractere no diretório raiz do Cygwin, portanto o shell expande /? e executa cmd com switches que não produzem saída.

    
por 15.09.2010 / 23:22