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.
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)
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.)
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
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.
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
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"