Kenneth Nellis wrote:
Couldn't find anything relevant in the archives or the documentation...

I have bash scripts that I want to run identically under Cygwin and Linux, which sometimes require the scripts to detect the environment and branch accordingly. There are numerous ways to do Cygwin detection, but I was wondering what technique should work with the widest audience and be most immune to future Cygwin developments.

FWIW, below are various techniques that work for *me* *today*, some of which have obvious flaws.

if [ -f /usr/bin/cygwin1.dll ]; then
if [ $CYGWIN_ROOT ]; then
if [ $OSTYPE = cygwin ]; then
if [ $(uname -s | grep -c CYGWIN) -gt 0 ]; then
if [ $(grep -c cygwin <<< ${BASH_VERSINFO[5]}) -gt 0 ]; then
if is_cygwin; then    # where is_cygwin is a locally-built C program
                      # that tests #ifdef __CYGWIN__

Well, FWIW I've always used a combination of '#ifdef __CYGWIN__' and uname (basically, the former when compiling C and the latter in scripts)... of course, both of those are only really testing if gcc and uname (respectively) are pointing at Cygwin versions. I would say that 99% of the time though 'uname' will work; basically it will only fail if you have an Interix/MKS/MinGW 'uname' in PATH, but you can always check for those as well to distinguish "real UNIX" from "UNIX on Windows". If anyone builds a 'uname' on a Windows system that tells you 'Linux', they deserve what they get. :-) I'd be inclined to say that anyone with a system where 'uname' is wrong deserves to have things break.

If you *know* you are running bash, you can also check if it is MinGW by testing if $BASH starts with '/' (at least, I assume it would be a DOS path on MinGW, and MKS doesn't have bash). But this won't distinguish Cygwin from Interix.

--
Matthew
My preferred shell is Christian. It's Bourne Again.


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to