0796d4d940be7766e0ea8f38d96d0bbf6957eced
[shellsnippets/shellsnippets.git] / other / getshver
1 # $MirOS: contrib/code/Snippets/getshver,v 1.10 2010/09/27 21:13:18 tg Exp $
2 #-
3 # Copyright (c) 2009, 2010
4 #       Thorsten Glaser <tg@mirbsd.org>
5 #
6 # Provided that these terms and disclaimer and all copyright notices
7 # are retained or reproduced in an accompanying document, permission
8 # is granted to deal in this work without restriction, including un-
9 # limited rights to use, publicly perform, distribute, sell, modify,
10 # merge, give away, or sublicence.
11 #
12 # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
13 # the utmost extent permitted by applicable law, neither express nor
14 # implied; without malicious intent or gross negligence. In no event
15 # may a licensor, author or contributor be held liable for indirect,
16 # direct, other damage, loss, or other issues arising in any way out
17 # of dealing in the work, even if advised of the possibility of such
18 # damage or existence of a defect, except proven that it results out
19 # of said person's immediate fault when using the work as intended.
20
21 # escape this from tclsh \
22 set x = 1
23 # escape this from tclsh \
24 test 1 = "$x" && goto CSH
25
26 # escape this from tclsh \
27 if false; then
28         puts tclsh
29         exit 0
30 fi
31
32 if test x"`echo u ^ echo x`" = x"x"; then
33         # Bourne shell, maybe Heirloom sh (tested)
34         echo bourne
35         exit 0
36 fi
37 if test x"$(echo u)" != x"u"; then
38         # other non-POSIX shell, maybe Solaris /bin/sh
39         echo binsh
40         exit 0
41 fi
42 # POSIX shell
43
44 case $ZSH_VERSION in
45 *[0-9]*) echo "zsh $ZSH_VERSION"; exit 0 ;;
46 esac
47
48 case x$SHELL_VERSION in
49 x) ;;
50 *[0-9]*build*)
51         if ( (set -o korn) && (set -o bash) ) >&- 2>&-; then
52                 # MKS {,Korn,Bash} Shell (fixed by Michael Langguth)
53                 ( # subshell, just in case
54                 typeset _o
55
56                 _o=`set -o`
57                 if [ -z "${_o##*-o bash*}" ]; then
58                         echo "mksbash $SHELL_VERSION"
59                 elif [ -z "${_o##*-o korn*}" ]; then
60                         echo "mksksh $SHELL_VERSION"
61                 else
62                         echo "mkssh $SHELL_VERSION"
63                 fi ) || echo "mks $SHELL_VERSION"
64                 exit 0
65         fi
66         ;;
67 esac
68
69 x=
70 case x$BASH_VERSION in
71 # no GNU bash
72 x) ;;
73 # known GNU bash versions
74 x2*) x=bash2 ;;
75 x3*) x=bash3 ;;
76 x4*) x=bash4 ;;
77 # either bash1 or an unlikely version
78 *) x=bash ;;
79 esac
80 if test x"$x" != x""; then
81         echo "$x $BASH_VERSION"
82         exit 0
83 fi
84
85 # mksh, mirbsdksh (pre-mksh), oksh (3.7+), pdksh
86 case $KSH_VERSION in
87 *MIRBSD\ KSH*) echo "mksh ${KSH_VERSION#*KSH }" ; exit 0 ;;
88 *PD\ KSH*MirOS*) echo "pdksh-mbsd${KSH_VERSION#*PD KSH}"; exit 0 ;;
89 *PD\ KSH*)
90         if test x"`typeset -i10 x=0x10 2>&-; echo $x`" = x"16"; then
91                 # printing KSH_VERSION here is rather useless though
92                 echo "pdksh-obsd ${KSH_VERSION#*KSH }"
93         else
94                 # unspecified: Debian (modern), 5.2.14 (sorta modern),
95                 # some older or vendor-modified version, old oksh
96                 echo "pdksh ${KSH_VERSION#*KSH }"
97         fi
98         exit 0 ;;
99 esac
100
101 x=.sh.version
102 (eval x=\$\{$x\}) 2>&- || x=fail
103 if test fail != "$x"; then
104         if builtin XBell >/dev/null 2>&1; then
105                 eval echo 'dtksh ${.sh.version#Version }'
106         else
107                 eval echo 'ksh93 ${.sh.version#Version }'
108         fi
109         exit 0
110 fi
111 if (
112         typeset _p
113
114         _p='f+([ o])bar'
115         eval [[ foobar = $_p '&&' \"foo bar\" = $_p ]]
116 ) 2>&-; then
117         echo ksh88
118         exit 0
119 fi
120
121 if test x"$POSH_VERSION" != x""; then
122         echo "posix-posh $POSH_VERSION"
123         exit 0
124 fi
125 if ( [[ 0 < 1 ]] ) 2>&-; then
126         echo posix-ext
127         exit 0
128 fi
129 if test x"`
130         foo() {
131                 local a
132
133                 a=2
134         }
135         a=1
136         foo
137         echo $a
138     `" = x"1"; then
139         # we have a working "local"
140         if test x"$(PATH=/nonexistent; export PATH
141             printf 'f%so' o 2>/dev/null)" = x"foo"; then
142                 # probably, but not certain
143                 # also: NetBSD /bin/sh on MirBSD; dash on Debian
144                 echo posix-dash
145                 exit 0
146         fi
147         # test if we fulfil Debian Policy 10.4
148         if ( test 1 -eq 1 -a a = a ) && test x"`echo -n a;
149             echo -n b`" = x"ab"; then
150                 echo posix-debian
151                 exit 0
152         fi
153 fi
154 if test x"`echo -n a; echo -n b`" = x"ab"; then
155         echo posix-echon
156         exit 0
157 fi
158 if test x"`echo a'\c'; echo b`" = x"ab"; then
159         echo posix-echoc
160         exit 0
161 fi
162 echo posix
163 exit 0
164
165 CSH:
166
167 if { bindkey >& /dev/null } then
168         echo "tcsh $tcsh"
169 else
170         echo csh
171 endif
172 exit 0