Ejecutar cmd.exe desde Cygwin

16

Me gustaría usar Cygwin para mi shell principal en el trabajo, pero mi grupo usa archivos por lotes para varios procesos. Me han dicho que solo puedo hacer cmd /c batch.batpara ejecutar el archivo por lotes desde Cygwin. Esto funciona para algunos casos, y no para otros. Uno de los archivos por lotes falla por completo cuando hago esto, pero funciona bien cuando lo ejecuto desde el shell de cmd.

Otra rareza que he notado es que si ejecuto cmd /?desde Cygwin, no obtengo salida. Ejecutar esto desde el shell cmd proporciona la ayuda estándar Incluso hacer cmd /c cmd /?no proporciona salida. Si ejecuto cmddesde Cygwin, me da el shell de cmd, y luego si ejecuto cmd /?, obtengo el texto de ayuda, pero sin los saltos de página.

Supongo que lo siguiente que debe intentar es encontrar una manera de iniciar cmd dentro de su propia ventana, como si hubiera ido a Inicio-> Ejecutar, y luego escriba "cmd". ¿Hay alguna manera de hacer esto desde Cygwin?

Ryan Fox
fuente

Respuestas:

8

/?bash lo trata como un patrón, donde el signo de interrogación se ajustará a un solo carácter, por lo que si tiene archivos o directorios de una letra en su raíz de Cygwin, el patrón será reemplazado por esos. echo /?te mostrará si eso es lo que está sucediendo. Puede escapar del signo de interrogación con una barra invertida: /\?. O citar a todo el argumento: '/?'.

cygstart c:/windows/system32/cmd iniciará cmd.exe en su propia ventana.

ak2
fuente
en mi win xp sp2, este siguiente fragmento de código funcionaría: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao
14

Puede ejecutar un archivo por lotes desde un shell de Cygwin directamente, ni siquiera necesita la llamada intermedia cmd. Si el archivo por lotes requiere argumentos, deben citarse al estilo de Windows; podría ser más simple de ejecutar cmd /c 'foo.bat "quoted arguments"'.

No dices en qué terminal estás ejecutando el shell. Los archivos por lotes por sí mismos no se preocupan por eso, pero los comandos que se ejecutan desde los archivos por lotes sí pueden. Los emuladores de terminal de Cygwin no emulan las consolas de Windows, por lo que son buenos para los programas de Cygwin y para los programas solo estándar, pero no para los programas de consola de Windows.

Si normalmente ejecuta shells de Cygwin en un terminal de Cygwin (como rxvt o mintty), puede ejecutar los archivos por lotes de problemas en una consola de Windows separada con start foo.bat. Es posible que desee ejecutar Console2 como un mejor reemplazo para la consola de Windows y ejecutar aplicaciones de consola de Windows en Console2 y aplicaciones Cygwin en un terminal Cygwin (o incluso en Console2).

cmd /?es una pista falsa: presumiblemente hay directorios de un solo carácter en el directorio raíz de Cygwin, por lo que el shell se expande /?y se ejecuta cmdcon interruptores que no producen salida.

Gilles 'SO- deja de ser malvado'
fuente
Necesitaba pegar variables de shell en los argumentos de cmd, así que pensé que lo siguiente podría funcionar alrededor de los analizadores Bash y 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
anguila ghEEz