How to execute a bat file from cygwin bash that uses the Windows find command

Miserable Variable picture Miserable Variable · Jul 11, 2013 · Viewed 90.3k times · Source

The find command does completely different in Windows and Unix. On Windows it is a fgrep-like utility listing matching lines in a file; on Unix -- and on Cygwin -- it list filenames matching some criteria.

Cygwin bash prepends its standard directories to the current path, so inside bash $PATH is typically /bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS.

Begin Update to provide additional details

For example I have many scripts that use the gnu find command -- for example scripts to purge directory trees that contain no files:

purge-empty-dirs.sh
find . -depth -type d -empty | xargs rmdir -p

I also have a bat file to start my build, which uses the windows find command, which searches for lines matching a string (similar to gnu grep).

build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...

Now, for my bash script to work I need /bin to be in path before c:\windows\system32. But for my bat file to run I need c:\windows\system32 to be in path before /bin

In general we might be able to claim that all bat files should be executed with the original environment inherited by bash, not the modified one. Does that make sense?

End Update

This how it should be, but breaks the bat files executed from bash. What is the best way to address this?

Is there a way to force Cygwin to execute bat files (or even all Windows executables) with the environment it started with? I am thinking of start /i behavior of cmd.exe. I am thinking of writing my own cygstart like utility that does this, by saving the environment (or at least $PATH) in .bash_profile/.bashrc. Does that make sense?

Any other suggestions?

Edit: See also Start new cmd.exe and NOT inherit environment

Answer

rurban picture rurban · Jul 14, 2013

If you chmod +x your.bat it works.

./your.bat

is run via cmd /c

Already answered in Why is it that Cygwin can run .bat scripts?