blog dds

2010.08.04

Batch Files as Shell Scripts Revisited

Four years ago I wrote about a method that could be used to have the Unix Bourne shell interpret Windows batch files. I'm using this trick a lot, because programming using the Windows/DOS batch files facilities is decidedly painful, whereas the Bourne shell remains a classy programming environment. There are still many cases where the style of Unix shell programming outshines and outperforms even modern scripting languages.

The solution I came up involves starting each batch file that contains a Unix shell script with the following sequence:

@#!sh %0.bat %*
For this to work you must have in your path a Unix-compatible shell named sh, and the batch file named #!sh.bat. (Download the file by right-clicking on the link; note that the file name starts with #!).

I had to rewrite the original #!sh.bat helper code implementation, because nowadays Cygwin complains when it sees a Windows-style path. Therefore, the helper code converts the batch file's Windows path into the Cygwin style, before passing it to the Unix shell. While at it I also removed a limitation of the original implementation that restricted the command line arguments to ten.

If you think that I'm unfairly criticizing batch file programming, have a look at the code to see the contortions I had to go through in order to perform a fairly simple task. On the other hand, this is the only batch file I'll ever need to write. Enjoy!

Read and post comments, or share through   


Creative Commons License Last modified: Wednesday, August 4, 2010 11:21 pm
Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-Share Alike 3.0 Greece License.