Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cygwin - run script silenty from "run command"

I have script lets say:

C:\foo.bsh 

I want to be able to run this command via the windows run command:

Start -> Run Windows Key + R 

and type something small like 'foo' and hitting return.

However, I do not want a cmd prompt to be visible. This script does some preprocessing for an IDE. I do not want the cmd prompt to be open for the lifetime of the IDE process.

I have tried:

1) Creating a bat file with the following contents:

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

2) Converting the above bat file to an exe using bat_2_exe_converter (does not make the cmd silent)

thoughts?

EDIT: The solution so far suggests something to type from an actual cygwin shell. I am trying to get a faster solution by having something short I can type in the Windows run command. Also, the nohup command; exit doesn't automatically kill the box - however I can manually kill it without killing the IDE process. The run command accepts shortcuts (.lnk's), bat's, exe's.

like image 273
Russ Avatar asked Mar 23 '09 12:03

Russ


People also ask

Can you run scripts from within the command window?

Running Scripts from the Command Prompt. Windows Script Host enables you to run scripts from the command prompt. CScript.exe provides command-line switches for setting script properties.


2 Answers

Try the run.exe command of cygwin. It is a big install, a complete unix environment for your Windows machine. Suppose you installed it at c:\cygwin\.

No mystery, just run c:\cygwin\bin\run.exe <your command here> and you will have your no dos window execution.

You can run it from any DOS window (run cmd.exe from the start menu). You don't need to run it from cygwin.

To make it easier, append C:\cygwin\bin to your %PATH% env var (My Computer → Properties → Advanced → Environment Variables) (Kudos to Felipe Alvarez comment).

Now you can just type

c:\cygwin\bin\run.exe "C:\foo.bsh" 

You must create a link in your Start Menu with this command so will be able to run it with Win-R.

Here is the man page of the 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) 
like image 143
neves Avatar answered Sep 22 '22 04:09

neves


You can use either...

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

...or...

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

Note: the -l flag tell bash to "act as if it had been directly invoked by login" and use Bash Startup Files. This is important in that it sets your $PATH and other things you rely on when you launch a cygwin terminal. If you don't include -l or --login you will get "command not found" when you try to call anything except of a bash builtin.

The difference between the 2 is like the difference between doing...

bash script_to_interpret.sh 

...and...

./executable_script.sh 

...in *nix. The former interprets the script using bash. The latter executes the script (only if it has chmod +x executable_script.sh) and interprets it according to its "shebang" line. The latter method is also what you want to do if your executable is not a script at all, like a *nix binary compiled from source.)

like image 38
Felipe Alvarez Avatar answered Sep 21 '22 04:09

Felipe Alvarez