Cygwin - exécuter le script silenty de "exécution de la commande"

j'ai script disons:

C:foo.bsh

je veux pouvoir exécuter cette commande via la commande windows run:

Start -> Run
Windows Key + R

et taper quelque chose de petit comme " foo " et frapper le retour.

cependant, je ne veux pas qu'une invite cmd soit visible. Ce script fait un peu de prétraitement pour un IDE. Je ne veux pas que l'invite cmd soit ouverte pendant toute la durée du processus IDE.

j'ai essayé:

1) Création d'un fichier bat avec le contenu suivant:

c:cygwinbinbash --login "C:foo.bsh" (this fails because it keeps a cmd open)

2) convertir le fichier bat ci-dessus en exe en utilisant bat_2_exe_converter (ne rend pas le cmd silencieux)

?

EDIT: La solution jusqu'à présent suggère quelque chose de type à partir d'une réelle shell cygwin. J'essaie d'obtenir une solution plus rapide en ayant quelque chose de court que je peux taper dans la commande Windows run. En outre, le nohup command; exit ne tue pas automatiquement la boîte - cependant je peux le tuer manuellement sans tuer le processus IDE. La commande exécuter accepte les raccourcis (.lnk), bat's, exe.

32
demandé sur Chris 2009-03-23 15:57:32

7 réponses

essayez la course.exe, la commande cygwin . C'est une grosse installation, un environnement unix complet pour votre machine Windows. Supposons que vous l'ayez installé à c:\cygwin\ .

ouvrir la coque (bash) et type man run .

pas de mystère, il suffit de lancer c:\cygwin\bin\run.exe <your command here> et vous aurez votre exécution sans fenêtre dos.

vous pouvez l'exécuter depuis N'importe quelle fenêtre DOS (lancer cmd.exe à partir du menu démarrer). Vous n'avez pas besoin de l'exécuter à partir de cygwin.

pour vous faciliter la tâche, ajoutez C:\cygwin\bin à votre %PATH% env var (mon ordinateur → propriétés → Variables avancées → environnement) (Bravo à Felipe Alvarez pour son commentaire).

maintenant vous pouvez taper

run "C:\foo.bsh"

Voici la page de manuel du 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)
38
répondu neves 2015-08-28 20:41:38

vous pouvez utiliser l'un ou l'autre...

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

...ou...

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

Note: le drapeau -l indique à bash d ' "agir comme s'il avait été directement invoqué par login" et utiliser Bash fichiers de démarrage . Ceci est important en ce qu'il définit votre $PATH et d'autres choses sur lesquelles vous comptez lorsque vous lancez un terminal cygwin. Si vous n'incluez pas la commande -l ou --login vous obtiendrez la commande "introuvable"" quand vous essayez d'appeler n'importe quoi sauf un bâtiment bash.

la différence entre les 2 est comme la différence entre faire...

bash script_to_interpret.sh

...et...

./executable_script.sh

...sous *nix. Le premier interprète le script en utilisant bash. Ce dernier exécute le script (seulement s'il a chmod +x executable_script.sh ) et l'interprète selon sa ligne "shebang" . La dernière méthode est aussi ce que vous voulez faire si votre exécutable n'est pas un script du tout, comme un binaire *nix compilé à partir de la source.)

13
répondu Felipe Alvarez 2017-04-13 12:36:31

Cela fait un moment que je n'ai pas pu trouver la solution, mais j'ai finalement trouvé le bon mélange.

vous pouvez simplement faire ce qui suit si vous avez cygwin sur votre chemin:

run bash test.js

si cygwin n'est pas sur votre chemin, vous pouvez le faire:

c:\cygwin\bin\run.exe -p /bin bash test.js

si vous cherchez plus de contrôle sur la fenêtre créée (maximize, etc) il vous ressemble peut utiliser cygstart aussi.

Sources:

- neves réponse ci-dessus (bien que ce n'était pas suffisant pour moi personnellement de le comprendre)

- http://cygwin.com/ml/cygwin/2008-09/msg00156.html

9
répondu studgeek 2011-04-15 23:09:08

comme le terminal ne peut pas fermer tant que votre script est en cours d'exécution, essayez la commande:

"nohup C:\foo.bsh; exit" 

de cette façon, votre script sera en arrière-plan et détaché du terminal, et il devrait sortir rapidement pour que le terminal disparaisse. Je pense que la fenêtre peut encore "flash" avec cette approche, mais les résultats devraient être meilleurs que ce que vous obtenez.

3
répondu Dana the Sane 2009-03-23 13:20:46

J'exécute Cygwin64 et le lien du serveur xwin pointe vers:

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

cela crée une icône et une notification sur la barre des tâches. Je n'aime pas ça. L'icône est plutôt inutile, la notification a toutes les options de votre menu .XWinrc.

So... J'ai écrit un .script vbs pour exécuter silencieusement cette commande et faire disparaître l'icône:

Set objShell = CreateObject("WScript.Shell")
objShell.Run("C:\cygwin64\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe"), 0
2
répondu brlinton 2014-09-02 10:10:17

une autre possibilité imparfaite est d'exécuter le script via un raccourci et de définir l'option D'exécution du raccourci à"minimisé".

1
répondu 2009-03-23 13:27:18

Allez dans le répertoire où vous avez installé cygwin(sur ma machine, il est c:/cygwin64/bin) Une fois là-bas tapez simplement "bash.exe 151910920"

-1
répondu Serge_k 2016-08-31 14:05:41