Tutorial :cywin bash script command not found when called from batch



Question:

#!/bin/bash  echo "Testing"  cd "/cygdrive/x/Internal Communications/Riccardo/"  filename=htdocs-`date +%A`.tar.gz  tar cvzf $filename "/cygdrive/c/Program Files/Zend/Apache2/htdocs"  

The above script is working when it is called inside cygwin console, but when I try to call it from a batch file I get "command not found" for date and tar command. I think that bash.exe does not have the PATH set up.

I need to run that script from that batch file because I want to add the script to the task scheduler.


Solution:1

Put your cygwin bin directory (likely C:\cygwin\bin) on your PATH environment variable.

This would also give you the benefit of being able to use commands like tar, ls, rm, etc. from a regular console windows and not just a Cygwin console.


Solution:2

As has already been said, you need to add the Cygwin binaries to your path. To do so, right click on "My Computer", click "Properties", then "Advanced", then "Environment Variables".

Create a new environment variable with name "CYGWIN_HOME" and value "C:\cygwin" (or wherever you installed cygwin. The default location is "C:\cygwin\" so this should probably work for you).

Then edit the environment variable named "PATH", and tack on the following to the end:

;%CYGWIN_HOME%\bin;%CYGWIN_HOME%\sbin;%CYGWIN_HOME%\usr\bin;%CYGWIN_HOME%\usr\sbin;%CYGWIN_HOME%\usr\local\bin;%CYGWIN_HOME%\usr\local\sbin

Close your command prompt, then reopen it. The cygwin binaries should now be available. You can double-check this by typing "which bash". It should report the location of your bash executable.


Solution:3

FWIW, Cygwin has cron.

Are you calling your script like this?

bash --login -i ./myscript.sh  


Solution:4

If this script is invoked from a Windows command shell, the first line will result in an error since #!/bin/bash is not a recognized Windows command and # is not a valid comment delimiter in a batch file.

So, the bottom line is that this script runs as a regular batch file rather than from within Cygwin's bash. As noted by matt b, you likely do not have the Cygwin executable path in your PATH environment variable. Without this, the batch file cannot find the Cygwin utilities (tar and date).


Solution:5

I just had this problem.

Editing the environment variable works great. But if you are have no admin rights you can´t do that. In this case you can execute your commands by using the absolute path like:

/usr/bin/tar cvzf $filename  /usr/bin/cat $filename  

If you do so your bash script works even if you call it from a batch file.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »