J'ai un script qui permet de dire:
C:\foo.bsh
Je veux pouvoir exécuter cette commande via la commande windows run:
Start -> Run
Windows Key + R
et tapez quelque chose de petit comme 'foo' et appuyez sur retour.
Cependant, je ne veux pas qu'une invite cmd soit visible. Ce script effectue un prétraitement pour un IDE. Je ne veux pas que l'invite cmd soit ouverte pendant la durée de vie du processus IDE.
J'ai essayé:
1) Création d'un fichier bat avec le contenu suivant:
c:\cygwin\bin\bash --login "C:\foo.bsh" (this fails because it keeps a cmd open)
2) Conversion du fichier bat ci-dessus en un exe en utilisant bat_2_exe_converter (ne rend pas le cmd silencieux)
pensées?
EDIT: La solution jusqu'à présent suggère quelque chose à taper à partir d'un shell cygwin réel. J'essaie d'obtenir une solution plus rapide en ayant quelque chose de court que je peux taper dans la commande d'exécution de Windows. Également Nohup command; exit
ne tue pas automatiquement la boîte - cependant je peux la tuer manuellement sans tuer le processus IDE. La commande run accepte les raccourcis (.lnk's), bat's, exe's).
Essayez la commande run.exe de cygwin . C'est une grosse installation, un environnement Unix complet pour votre machine Windows. Supposons que vous l'ayez installé à c:\cygwin\
.
Ouvrez le shell (bash) et tapez man run
.
Pas de mystère, lancez simplement c:\cygwin\bin\run.exe <your command here>
et vous obtiendrez votre exécution sans fenêtre.
Vous pouvez l'exécuter à partir de n'importe quelle fenêtre DOS (exécutez cmd.exe dans le 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 (Poste de travail → Propriétés → Avancé → Variables d'environnement) (bravo à Felipe Alvarez commentaire).
Maintenant, vous pouvez simplement taper
run "C:\foo.bsh"
Voici la page de manuel de la commande run:
$ 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)
Vous pouvez utiliser soit ...
c:\cygwin\bin\bash -l /path/to/script_to_interpret.sh
...ou...
c:\cygwin\bin\bash -l -c /path/to/executable_script.sh
Remarque: le -l
flag indique à bash "d'agir comme s'il avait été directement invoqué par la connexion" et d'utiliser Bash Startup Files . Ceci est important car il définit votre $ PATH et d'autres éléments sur lesquels vous comptez lorsque vous lancez un terminal cygwin. Si vous n'incluez pas -l
ou --login
vous obtiendrez "commande introuvable" lorsque vous essayez d'appeler quoi que ce soit, à l'exception d'une commande bash intégrée.
La différence entre les 2 est comme la différence entre faire ...
bash script_to_interpret.sh
...et...
./executable_script.sh
... dans * nix. Le premier interprète le script en utilisant bash. Ce dernier exécute le script (uniquement s'il a chmod +x executable_script.sh
) et l'interprète selon sa ligne "Shebang" . Cette dernière méthode est également ce que vous voulez faire si votre exécutable n'est pas du tout un script, comme un binaire * nix compilé à partir de la source.)
Cela me dérange depuis un moment, je n'ai pas trouvé la solution pour cela, 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 recherchez plus de contrôle sur la fenêtre créée (maximiser, etc.), il semble que vous pouvez également utiliser cygstart
.
Sources:
- neves répond plus haut (bien que cela ne soit pas suffisant en soi pour que je puisse le comprendre)
- http://cygwin.com/ml/cygwin/2008-09/msg00156.html
Comme le terminal ne peut pas se fermer pendant que votre script est toujours en cours d'exécution, essayez la commande:
"Nohup C:\foo.bsh; exit"
De cette façon, votre script sera mis en arrière-plan et détaché du terminal, et il devrait se fermer rapidement pour que le terminal disparaisse. Je pense que la fenêtre peut toujours "clignoter" avec cette approche, mais les résultats devraient être meilleurs que ce que vous obtenez.
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 vos options de menu de .XWinrc.
Alors ... 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
Une autre possibilité imparfaite consiste à exécuter le script via un raccourci et à définir l'option Exécuter du raccourci sur "minimisé".
Allez dans le répertoire où vous avez installé cygwin (sur ma machine c'est c:/cygwin64/bin) Une fois là simplement tapez "bash.exe"