[ANN] Sh-Supp converts native win shell syntax to POSIX sh syntax
Tue Feb 16 17:15:00 GMT 1999
This little utilty might be of help for some few people, I
Sh-Supp the Native Win32 shell to POSIX sh command exectution synax
converter and script supporter
"Bringing both worlds together"
Sh-Supp utility does following:
* Converts COMMAND.COM's command execution syntax
COMMAND.COM /C <command> <arg1> <arg2> ... <argN>
to POSIX shell excution syntax
<shell> -c '<command;> <arg1> <arg2> ... <argN>'
* Checks whether <command> is POSIX shell script, and if so, issues
corresponding interpreter call to execute it:
<interpreter> <command> <arg1> <arg2> ... <argN>
(which is executed via shell, of course)
There are following reasons to use it:
* Some people (like me) happy to have real shell underneath, but prefer
to use additional fullscreen shell for direct interaction
* Some people (like me) don't want to use buggy and sluggish current
ports of real shells, still retaining some nice capabilties such as
How it works
MS designed a hook to specify a program which executes a coomand - the
COMSPEC environment variable. DOS and Windows programs supposed to favor
its setting. So, we just override COMSPEC with 'sh-supp.exe'. Then
following POSIX-based shell-lookup rules apply:
* Use contents of SHELL environment variable as shell name
* If SHELL is not set, suppose 'C:\COMMAND.COM /C' (sane setting for
* If shell name contains '/C' (case-sensitive), that shell considered
having ms-idiosyncratic syntax, else - POSIX syntax
Then, file named <command> searched on PATH (with following rules: if PATH
doesn't contain an '.' path, it searches current directory before all
listed on path, else it doesn't implicitly search current direcory).
If such file found and has its first line starting with '#!', it considers
it shell script and forms new command line, starting with rest of script's
first line, followed by original <command> <arg1> ... <argN>. (Note, this
happens independently whether shell POSIX or not).
Either original or new-formed command line executed with method appropriate
for type of shell in effect.
Note that, unlike POSIX specifies, script interpreter is searched on path,
so you may specify just '#!awk -f' (That's considered to be feature). If
you want POSIX to this joke utility portabilty, you have to have your stuff
in appropriate places (/bin, /usr/bin, and /usr/local/bin mostly), or
recompile it with cygwin and use its mount table and/or symlinks.
1. Decide where you'll put variables settings. Bat script of your default
environment is most appropriate place, autoexec.bat's branch to Win is
another possibilty. Be careful not to set it in autoexec.bat
unconditionally, or you will be unable to run anything in pure dos
(restart with shift pressed to bypass autoexec.bat in such case).
2. If you don't have SHELL, set it to your POSIX shell, or if you don't
care about that, to '<path>\COMMAND.COM /C' (Win9x) or '<path>\CMD.EXE
(Fullscreen) Shells that favor COMSPEC
* Volkov Commander is John Socha's Norton Commander clone, DOS
* FAR is another NC clone, win32 console application, one I use and
mostly happy with
Sh-Supp 1.0, sources and binary
More information about the Cygwin