2009-03-23 11 views
29

tengo script te dicen:Cygwin - ejecutar Silenty guión de "orden de marcha"

C:\foo.bsh 

Quiero ser capaz de ejecutar este comando a través de las ventanas del sistema ejecute:

Start -> Run 
Windows Key + R 

y tipo algo pequeño como 'foo' y golpeando retorno.

Sin embargo, no quiero que se visualice un aviso de cmd. Este script realiza algunos preprocesamientos para un IDE. No quiero que el prompt cmd se abra durante la vida del proceso IDE.

que he intentado:

1) La creación de un archivo bat con el siguiente contenido:

c:\cygwin\bin\bash --login "C:\foo.bsh" (this fails because it keeps a cmd open) 

2) Convertir el archivo del palo por encima de un exe usando bat_2_exe_converter (no hace que el cmd en silencio)

thoughts?

EDITAR: La solución hasta el momento sugiere algo para escribir desde un shell real de cygwin. Estoy tratando de obtener una solución más rápida al tener algo corto. Puedo escribir el comando de ejecución de Windows. Además, el nohup command; exit no mata automáticamente a la caja, sin embargo, puedo matarlo manualmente sin matar el proceso IDE. El comando de ejecución acepta accesos directos (.lnk's), bat's, exe's.

Respuesta

3

A medida que el terminal no puede cerrar, mientras que su guión todavía se está ejecutando, intente el comando:

"nohup C:\foo.bsh; exit" 

De esta manera su guión será en segundo plano y se separa de la terminal, y debe salir rápidamente para que el terminal de se va. Creo que la ventana todavía puede 'parpadear' con este enfoque, pero los resultados deberían ser mejores que los que obtendrás.

1

Otra posibilidad imperfecta es ejecutar la secuencia de comandos a través de un atajo y establecer la opción Ejecutar del acceso directo a "minimizado".

36

Pruebe el comando run.exe de cygwin. Es una instalación grande, un entorno completo de Unix para su máquina con Windows. Supongamos que lo instaló en c:\cygwin\.

Abra el shell (bash) y escriba man run.

No hay misterio, solo ejecute c:\cygwin\bin\run.exe <your command here> y obtendrá la ejecución de su ventana no dos.

Puede ejecutarlo desde cualquier ventana de DOS (ejecute cmd.exe desde el menú de inicio). No necesita ejecutarlo desde cygwin.

Para hacerlo más fácil, añada C:\cygwin\bin a su% PATH% env var (Mi PC → Propiedades → Avanzado → Variables de entorno) (Felicitaciones a Felipe Alvarez).

Ahora se puede escribir simplemente

run "C:\foo.bsh" 

Aquí está la página del manual de la runcommand:

$ man run 
RUN(1)        run 1.3.0       RUN(1) 

NAME 
     run - start programs with hidden console window 

SYNOPSIS 
     run [ -p path ] command [ -wait ] arguments 

     runcommand [ -p path ] [ -wait ] arguments 

DESCRIPTION 
     Windows programs are either GUI programs or console programs. When 
     started console programs will either attach to an existing console 
     or create a new one. GUI programs can never attach to an exiting con‐ 
     sole. There is no way to attach to an existing console but hide it if 
     started as GUI program. 

     run will do this for you. It works as intermediate and starts a pro‐ 
     gram but makes the console window hidden. 

     With -p path you can add path to the PATH environment variable. 

     Issuing -wait as first program argument will make run wait for program 
     completition, otherwise it returns immediately. 

     The second variant is for creating wrappers. If the executable is 
     named runcommand (eg runemacs), run will try to start the program (eg 
     emacs). 

EXAMPLES 
     run -p /usr/X11R6/bin xterm 

     run emacs -wait 
     runemacs -wait 

     run make -wait 

AUTHORS 
     Charles S. Wilson 

     Harold L Hunt II 

     Jehan Bing 

     Alexander Gottwald 

Version 1.3.0     November 2005       RUN(1) 
+1

Sip este comando hace que las ventanas sean muy linux, como –

+0

, puede agregar C: \ cygwin \ bin a su variable de entorno% PATH%. –

+1

No es bueno: todavía abre una ventana de terminal y luego la cierra, robando el foco y haciendo que la barra de tareas parpadee. –

9

Se me ha estado molestando por un tiempo no pude encontrar la solución para esto, pero finalmente conseguí la mezcla correcta.

puede simplemente hacer lo siguiente si tiene cygwin en el PATH:
run bash test.js

Si cygwin no está en su ruta, puede hacer esto:
c:\cygwin\bin\run.exe -p /bin bash test.js

Si está buscando más control sobre la ventana creada (maximizar, etc.) parece que también puede usar cygstart.

Fuentes:
- Neves respuesta anterior (aunque eso no fue suficiente por sí mismo para mí personalmente para averiguarlo)
- http://cygwin.com/ml/cygwin/2008-09/msg00156.html

+0

cygstart: aprendí algo nuevo hoy;) –

+0

Si no recuerdo mal, 'cygstart' permite que Windows abra el comando/link/etc., P. puedes 'cygstart file: // C: /' y abrirá Windows Explorer apuntando a 'C: /', mientras que 'run' no tiene esta habilidad. Por otro lado, si no configuró su entorno Windows para abrir archivos .sh con bash (usando 'assoc',' ftype'), 'cygstart' probablemente no pueda abrirlos, mientras que' run' probablemente pueda (No lo probé). –

11

puede utilizar cualquiera ...

... o ...

c:\cygwin\bin\bash -l -c /path/to/executable_script.sh 

Nota: la bandera -l indica a bash que "actúe como si se hubiera invocado directamente mediante el inicio de sesión" y utiliza Bash Startup Files. Esto es importante porque establece $ PATH y otras cosas de las que depende cuando inicia un terminal cygwin. Si no incluye -l o --login, obtendrá el "comando no encontrado" cuando intente llamar a cualquier cosa que no sea un bash incorporado.

La diferencia entre el 2 es como la diferencia entre hacer ...

bash script_to_interpret.sh 

... y ...

./executable_script.sh 

... en * nix. El primero interpreta el guion usando bash. Este último ejecuta el script (solo si tiene chmod +x executable_script.sh) y lo interpreta según su línea "shebang". El último método es también lo que quiere hacer si su ejecutable no es un script en absoluto, como una binaria * nix compilado desde el código fuente)

+0

¡Muchas gracias por su respuesta! Lo que pasa es que cuando ejecuto mi script, consigo los siguientes errores: 'C:/cygwin64/home/ALE/kmeans2: Línea 148: awk: comando no found' ' C:/cygwin64/home/ale/kmeans2: línea 149: dirname: comando no encontrado' 'C:/cygwin64/home/ale/kmeans2: línea 150: nombre base: comando no encontrado' ' C:/cygwin64/home/ale/kmeans2: línea 306 : mkdir: comando no encontrado'. ¿Tiene alguna idea de lo que podría estar mal? –

+0

Haz una nueva publicación. No obtendrá ayuda haciendo preguntas en un comentario. Publica también tu script –

+0

@AlejandroLozdziejski el '$ PATH' dentro de ese bash va a faltar'/bin/', etc. –

2

estoy corriendo Cygwin64 y los puntos de enlace del servidor xwin a:.

C: \ cygwin64 \ bin \ run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe

Esto crea un icono Y una notificación en la barra de tareas. No me gusta eso. El icono es bastante inútil, la notificación tiene todas las opciones de menú desde .XWinrc.

Entonces ... Escribí una.VBS script se ejecute en silencio este comando y hacer que el icono desaparezca:

Set objShell = CreateObject("WScript.Shell") 
objShell.Run("C:\cygwin64\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe"), 0 
-1

Vaya al directorio donde ha instalado cygwin (en mi máquina es c:/cygwin64/bin) Una vez allí simplemente escriba "fiesta .exe "

Cuestiones relacionadas