xref: /aosp_15_r20/external/shflags/lib/versions (revision 63d4e48fb639f6414be0db9d718e3be2667e4fed)
1*63d4e48fSSadaf Ebrahimi#! /bin/sh
2*63d4e48fSSadaf Ebrahimi# vim:et:ft=sh:sts=2:sw=2
3*63d4e48fSSadaf Ebrahimi#
4*63d4e48fSSadaf Ebrahimi# Versions determines the versions of all installed shells.
5*63d4e48fSSadaf Ebrahimi#
6*63d4e48fSSadaf Ebrahimi# Copyright 2008-2020 Kate Ward. All Rights Reserved.
7*63d4e48fSSadaf Ebrahimi# Released under the Apache 2.0 License.
8*63d4e48fSSadaf Ebrahimi#
9*63d4e48fSSadaf Ebrahimi# Author: [email protected] (Kate Ward)
10*63d4e48fSSadaf Ebrahimi# https://github.com/kward/shlib
11*63d4e48fSSadaf Ebrahimi#
12*63d4e48fSSadaf Ebrahimi# This library provides reusable functions that determine actual names and
13*63d4e48fSSadaf Ebrahimi# versions of installed shells and the OS. The library can also be run as a
14*63d4e48fSSadaf Ebrahimi# script if set executable.
15*63d4e48fSSadaf Ebrahimi#
16*63d4e48fSSadaf Ebrahimi# Disable checks that aren't fully portable (POSIX != portable).
17*63d4e48fSSadaf Ebrahimi# shellcheck disable=SC2006
18*63d4e48fSSadaf Ebrahimi
19*63d4e48fSSadaf EbrahimiARGV0=`basename "$0"`
20*63d4e48fSSadaf EbrahimiLSB_RELEASE='/etc/lsb-release'
21*63d4e48fSSadaf EbrahimiVERSIONS_SHELLS='ash /bin/bash /bin/dash /bin/ksh /bin/mksh /bin/pdksh /bin/zsh /usr/xpg4/bin/sh /bin/sh /sbin/sh'
22*63d4e48fSSadaf Ebrahimi
23*63d4e48fSSadaf Ebrahimitrue; TRUE=$?
24*63d4e48fSSadaf Ebrahimifalse; FALSE=$?
25*63d4e48fSSadaf EbrahimiERROR=2
26*63d4e48fSSadaf Ebrahimi
27*63d4e48fSSadaf EbrahimiUNAME_R=`uname -r`
28*63d4e48fSSadaf EbrahimiUNAME_S=`uname -s`
29*63d4e48fSSadaf Ebrahimi
30*63d4e48fSSadaf Ebrahimi__versions_haveStrings=${ERROR}
31*63d4e48fSSadaf Ebrahimi
32*63d4e48fSSadaf Ebrahimiversions_osName() {
33*63d4e48fSSadaf Ebrahimi  os_name_='unrecognized'
34*63d4e48fSSadaf Ebrahimi  os_system_=${UNAME_S}
35*63d4e48fSSadaf Ebrahimi  os_release_=${UNAME_R}
36*63d4e48fSSadaf Ebrahimi  case ${os_system_} in
37*63d4e48fSSadaf Ebrahimi    CYGWIN_NT-*) os_name_='Cygwin' ;;
38*63d4e48fSSadaf Ebrahimi    Darwin)
39*63d4e48fSSadaf Ebrahimi      os_name_=`/usr/bin/sw_vers -productName`
40*63d4e48fSSadaf Ebrahimi      os_version_=`versions_osVersion`
41*63d4e48fSSadaf Ebrahimi      case ${os_version_} in
42*63d4e48fSSadaf Ebrahimi        10.4|10.4.[0-9]*) os_name_='Mac OS X Tiger' ;;
43*63d4e48fSSadaf Ebrahimi        10.5|10.5.[0-9]*) os_name_='Mac OS X Leopard' ;;
44*63d4e48fSSadaf Ebrahimi        10.6|10.6.[0-9]*) os_name_='Mac OS X Snow Leopard' ;;
45*63d4e48fSSadaf Ebrahimi        10.7|10.7.[0-9]*) os_name_='Mac OS X Lion' ;;
46*63d4e48fSSadaf Ebrahimi        10.8|10.8.[0-9]*) os_name_='Mac OS X Mountain Lion' ;;
47*63d4e48fSSadaf Ebrahimi        10.9|10.9.[0-9]*) os_name_='Mac OS X Mavericks' ;;
48*63d4e48fSSadaf Ebrahimi        10.10|10.10.[0-9]*) os_name_='Mac OS X Yosemite' ;;
49*63d4e48fSSadaf Ebrahimi        10.11|10.11.[0-9]*) os_name_='Mac OS X El Capitan' ;;
50*63d4e48fSSadaf Ebrahimi        10.12|10.12.[0-9]*) os_name_='macOS Sierra' ;;
51*63d4e48fSSadaf Ebrahimi        10.13|10.13.[0-9]*) os_name_='macOS High Sierra' ;;
52*63d4e48fSSadaf Ebrahimi        10.14|10.14.[0-9]*) os_name_='macOS Mojave' ;;
53*63d4e48fSSadaf Ebrahimi        10.15|10.15.[0-9]*) os_name_='macOS Catalina' ;;
54*63d4e48fSSadaf Ebrahimi        11.*) os_name_='macOS Big Sur' ;;
55*63d4e48fSSadaf Ebrahimi        12.*) os_name_='macOS Monterey' ;;
56*63d4e48fSSadaf Ebrahimi        13.*) os_name_='macOS Ventura' ;;
57*63d4e48fSSadaf Ebrahimi        14.*) os_name_='macOS Sonoma' ;;
58*63d4e48fSSadaf Ebrahimi        *) os_name_='macOS' ;;
59*63d4e48fSSadaf Ebrahimi      esac
60*63d4e48fSSadaf Ebrahimi      ;;
61*63d4e48fSSadaf Ebrahimi    FreeBSD) os_name_='FreeBSD' ;;
62*63d4e48fSSadaf Ebrahimi    Linux) os_name_='Linux' ;;
63*63d4e48fSSadaf Ebrahimi    SunOS)
64*63d4e48fSSadaf Ebrahimi      os_name_='SunOS'
65*63d4e48fSSadaf Ebrahimi      if [ -r '/etc/release' ]; then
66*63d4e48fSSadaf Ebrahimi        if grep 'OpenSolaris' /etc/release >/dev/null; then
67*63d4e48fSSadaf Ebrahimi          os_name_='OpenSolaris'
68*63d4e48fSSadaf Ebrahimi        else
69*63d4e48fSSadaf Ebrahimi          os_name_='Solaris'
70*63d4e48fSSadaf Ebrahimi        fi
71*63d4e48fSSadaf Ebrahimi      fi
72*63d4e48fSSadaf Ebrahimi      ;;
73*63d4e48fSSadaf Ebrahimi  esac
74*63d4e48fSSadaf Ebrahimi
75*63d4e48fSSadaf Ebrahimi  echo ${os_name_}
76*63d4e48fSSadaf Ebrahimi  unset os_name_ os_system_ os_release_ os_version_
77*63d4e48fSSadaf Ebrahimi}
78*63d4e48fSSadaf Ebrahimi
79*63d4e48fSSadaf Ebrahimiversions_osVersion() {
80*63d4e48fSSadaf Ebrahimi  os_version_='unrecognized'
81*63d4e48fSSadaf Ebrahimi  os_system_=${UNAME_S}
82*63d4e48fSSadaf Ebrahimi  os_release_=${UNAME_R}
83*63d4e48fSSadaf Ebrahimi  case ${os_system_} in
84*63d4e48fSSadaf Ebrahimi    CYGWIN_NT-*)
85*63d4e48fSSadaf Ebrahimi      os_version_=`expr "${os_release_}" : '\([0-9]*\.[0-9]\.[0-9]*\).*'`
86*63d4e48fSSadaf Ebrahimi      ;;
87*63d4e48fSSadaf Ebrahimi    Darwin)
88*63d4e48fSSadaf Ebrahimi      os_version_=`/usr/bin/sw_vers -productVersion`
89*63d4e48fSSadaf Ebrahimi      ;;
90*63d4e48fSSadaf Ebrahimi    FreeBSD)
91*63d4e48fSSadaf Ebrahimi      os_version_=`expr "${os_release_}" : '\([0-9]*\.[0-9]*\)-.*'`
92*63d4e48fSSadaf Ebrahimi      ;;
93*63d4e48fSSadaf Ebrahimi    Linux)
94*63d4e48fSSadaf Ebrahimi      if [ -r '/etc/os-release' ]; then
95*63d4e48fSSadaf Ebrahimi          os_version_=`awk -F= '$1~/PRETTY_NAME/{print $2}' /etc/os-release \
96*63d4e48fSSadaf Ebrahimi            |sed 's/"//g'`
97*63d4e48fSSadaf Ebrahimi      elif [ -r '/etc/redhat-release' ]; then
98*63d4e48fSSadaf Ebrahimi        os_version_=`cat /etc/redhat-release`
99*63d4e48fSSadaf Ebrahimi      elif [ -r '/etc/SuSE-release' ]; then
100*63d4e48fSSadaf Ebrahimi        os_version_=`head -n 1 /etc/SuSE-release`
101*63d4e48fSSadaf Ebrahimi      elif [ -r "${LSB_RELEASE}" ]; then
102*63d4e48fSSadaf Ebrahimi        if grep -q 'DISTRIB_ID=Ubuntu' "${LSB_RELEASE}"; then
103*63d4e48fSSadaf Ebrahimi          # shellcheck disable=SC2002
104*63d4e48fSSadaf Ebrahimi          os_version_=`cat "${LSB_RELEASE}" \
105*63d4e48fSSadaf Ebrahimi            |awk -F= '$1~/DISTRIB_DESCRIPTION/{print $2}' \
106*63d4e48fSSadaf Ebrahimi            |sed 's/"//g;s/ /-/g'`
107*63d4e48fSSadaf Ebrahimi        fi
108*63d4e48fSSadaf Ebrahimi      fi
109*63d4e48fSSadaf Ebrahimi      ;;
110*63d4e48fSSadaf Ebrahimi    SunOS)
111*63d4e48fSSadaf Ebrahimi      if [ -r '/etc/release' ]; then
112*63d4e48fSSadaf Ebrahimi        if grep 'OpenSolaris' /etc/release >/dev/null; then  # OpenSolaris
113*63d4e48fSSadaf Ebrahimi          os_version_=`grep 'OpenSolaris' /etc/release |awk '{print $2"("$3")"}'`
114*63d4e48fSSadaf Ebrahimi        else  # Solaris
115*63d4e48fSSadaf Ebrahimi          major_=`echo "${os_release_}" |sed 's/[0-9]*\.\([0-9]*\)/\1/'`
116*63d4e48fSSadaf Ebrahimi          minor_=`grep Solaris /etc/release |sed 's/[^u]*\(u[0-9]*\).*/\1/'`
117*63d4e48fSSadaf Ebrahimi          os_version_="${major_}${minor_}"
118*63d4e48fSSadaf Ebrahimi        fi
119*63d4e48fSSadaf Ebrahimi      fi
120*63d4e48fSSadaf Ebrahimi      ;;
121*63d4e48fSSadaf Ebrahimi  esac
122*63d4e48fSSadaf Ebrahimi
123*63d4e48fSSadaf Ebrahimi  echo "${os_version_}"
124*63d4e48fSSadaf Ebrahimi  unset os_release_ os_system_ os_version_ major_ minor_
125*63d4e48fSSadaf Ebrahimi}
126*63d4e48fSSadaf Ebrahimi
127*63d4e48fSSadaf Ebrahimiversions_shellVersion() {
128*63d4e48fSSadaf Ebrahimi  shell_=$1
129*63d4e48fSSadaf Ebrahimi
130*63d4e48fSSadaf Ebrahimi  shell_present_=${FALSE}
131*63d4e48fSSadaf Ebrahimi  case "${shell_}" in
132*63d4e48fSSadaf Ebrahimi    ash) [ -x '/bin/busybox' ] && shell_present_=${TRUE} ;;
133*63d4e48fSSadaf Ebrahimi    *) [ -x "${shell_}" ] && shell_present_=${TRUE} ;;
134*63d4e48fSSadaf Ebrahimi  esac
135*63d4e48fSSadaf Ebrahimi  if [ ${shell_present_} -eq ${FALSE} ]; then
136*63d4e48fSSadaf Ebrahimi    echo 'not installed'
137*63d4e48fSSadaf Ebrahimi    return ${FALSE}
138*63d4e48fSSadaf Ebrahimi  fi
139*63d4e48fSSadaf Ebrahimi
140*63d4e48fSSadaf Ebrahimi  version_=''
141*63d4e48fSSadaf Ebrahimi  case ${shell_} in
142*63d4e48fSSadaf Ebrahimi    # SunOS shells.
143*63d4e48fSSadaf Ebrahimi    /sbin/sh) ;;
144*63d4e48fSSadaf Ebrahimi    /usr/xpg4/bin/sh) version_=`versions_shell_xpg4 "${shell_}"` ;;
145*63d4e48fSSadaf Ebrahimi
146*63d4e48fSSadaf Ebrahimi    # Generic shell.
147*63d4e48fSSadaf Ebrahimi    */sh)
148*63d4e48fSSadaf Ebrahimi      # This could be one of any number of shells. Try until one fits.
149*63d4e48fSSadaf Ebrahimi      version_=''
150*63d4e48fSSadaf Ebrahimi      [ -z "${version_}" ] && version_=`versions_shell_bash "${shell_}"`
151*63d4e48fSSadaf Ebrahimi      # dash cannot be self determined yet
152*63d4e48fSSadaf Ebrahimi      [ -z "${version_}" ] && version_=`versions_shell_ksh "${shell_}"`
153*63d4e48fSSadaf Ebrahimi      # pdksh is covered in versions_shell_ksh()
154*63d4e48fSSadaf Ebrahimi      [ -z "${version_}" ] && version_=`versions_shell_xpg4 "${shell_}"`
155*63d4e48fSSadaf Ebrahimi      [ -z "${version_}" ] && version_=`versions_shell_zsh "${shell_}"`
156*63d4e48fSSadaf Ebrahimi      ;;
157*63d4e48fSSadaf Ebrahimi
158*63d4e48fSSadaf Ebrahimi    # Specific shells.
159*63d4e48fSSadaf Ebrahimi    ash) version_=`versions_shell_ash "${shell_}"` ;;
160*63d4e48fSSadaf Ebrahimi    # bash - Bourne Again SHell (https://www.gnu.org/software/bash/)
161*63d4e48fSSadaf Ebrahimi    */bash) version_=`versions_shell_bash "${shell_}"` ;;
162*63d4e48fSSadaf Ebrahimi    */dash) version_=`versions_shell_dash` ;;
163*63d4e48fSSadaf Ebrahimi    # ksh - KornShell (http://www.kornshell.com/)
164*63d4e48fSSadaf Ebrahimi    */ksh) version_=`versions_shell_ksh "${shell_}"` ;;
165*63d4e48fSSadaf Ebrahimi    # mksh - MirBSD Korn Shell (http://www.mirbsd.org/mksh.htm)
166*63d4e48fSSadaf Ebrahimi    */mksh) version_=`versions_shell_ksh "${shell_}"` ;;
167*63d4e48fSSadaf Ebrahimi    # pdksh - Public Domain Korn Shell (http://web.cs.mun.ca/~michael/pdksh/)
168*63d4e48fSSadaf Ebrahimi    */pdksh) version_=`versions_shell_pdksh "${shell_}"` ;;
169*63d4e48fSSadaf Ebrahimi    # zsh (https://www.zsh.org/)
170*63d4e48fSSadaf Ebrahimi    */zsh) version_=`versions_shell_zsh "${shell_}"` ;;
171*63d4e48fSSadaf Ebrahimi
172*63d4e48fSSadaf Ebrahimi    # Unrecognized shell.
173*63d4e48fSSadaf Ebrahimi    *) version_='invalid'
174*63d4e48fSSadaf Ebrahimi  esac
175*63d4e48fSSadaf Ebrahimi
176*63d4e48fSSadaf Ebrahimi  echo "${version_:-unknown}"
177*63d4e48fSSadaf Ebrahimi  unset shell_ version_
178*63d4e48fSSadaf Ebrahimi}
179*63d4e48fSSadaf Ebrahimi
180*63d4e48fSSadaf Ebrahimi# The ash shell is included in BusyBox.
181*63d4e48fSSadaf Ebrahimiversions_shell_ash() {
182*63d4e48fSSadaf Ebrahimi  busybox --help |head -1 |sed 's/BusyBox v\([0-9.]*\) .*/\1/'
183*63d4e48fSSadaf Ebrahimi}
184*63d4e48fSSadaf Ebrahimi
185*63d4e48fSSadaf Ebrahimiversions_shell_bash() {
186*63d4e48fSSadaf Ebrahimi  $1 --version : 2>&1 |grep 'GNU bash' |sed 's/.*version \([^ ]*\).*/\1/'
187*63d4e48fSSadaf Ebrahimi}
188*63d4e48fSSadaf Ebrahimi
189*63d4e48fSSadaf Ebrahimi# Assuming Ubuntu Linux until somebody comes up with a better test. The
190*63d4e48fSSadaf Ebrahimi# following test will return an empty string if dash is not installed.
191*63d4e48fSSadaf Ebrahimiversions_shell_dash() {
192*63d4e48fSSadaf Ebrahimi  eval dpkg >/dev/null 2>&1
193*63d4e48fSSadaf Ebrahimi  [ $? -eq 127 ] && return  # Return if dpkg not found.
194*63d4e48fSSadaf Ebrahimi
195*63d4e48fSSadaf Ebrahimi  dpkg -l |grep ' dash ' |awk '{print $3}'
196*63d4e48fSSadaf Ebrahimi}
197*63d4e48fSSadaf Ebrahimi
198*63d4e48fSSadaf Ebrahimiversions_shell_ksh() {
199*63d4e48fSSadaf Ebrahimi  versions_shell_=$1
200*63d4e48fSSadaf Ebrahimi  versions_version_=''
201*63d4e48fSSadaf Ebrahimi
202*63d4e48fSSadaf Ebrahimi  # Try a few different ways to figure out the version.
203*63d4e48fSSadaf Ebrahimi  versions_version_=`${versions_shell_} --version : 2>&1`
204*63d4e48fSSadaf Ebrahimi  # shellcheck disable=SC2181
205*63d4e48fSSadaf Ebrahimi  if [ $? -eq 0 ]; then
206*63d4e48fSSadaf Ebrahimi    versions_version_=`echo "${versions_version_}" \
207*63d4e48fSSadaf Ebrahimi      |sed 's/.*\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/'`
208*63d4e48fSSadaf Ebrahimi  else
209*63d4e48fSSadaf Ebrahimi    versions_version_=''
210*63d4e48fSSadaf Ebrahimi  fi
211*63d4e48fSSadaf Ebrahimi  if [ -z "${versions_version_}" ]; then
212*63d4e48fSSadaf Ebrahimi    # shellcheck disable=SC2016
213*63d4e48fSSadaf Ebrahimi    versions_version_=`${versions_shell_} -c 'echo ${KSH_VERSION}'`
214*63d4e48fSSadaf Ebrahimi  fi
215*63d4e48fSSadaf Ebrahimi  if [ -z "${versions_version_}" ]; then
216*63d4e48fSSadaf Ebrahimi    _versions_have_strings
217*63d4e48fSSadaf Ebrahimi    versions_version_=`strings "${versions_shell_}" 2>&1 \
218*63d4e48fSSadaf Ebrahimi      |grep Version \
219*63d4e48fSSadaf Ebrahimi      |sed 's/^.*Version \(.*\)$/\1/;s/ s+ \$$//;s/ /-/g'`
220*63d4e48fSSadaf Ebrahimi  fi
221*63d4e48fSSadaf Ebrahimi  if [ -z "${versions_version_}" ]; then
222*63d4e48fSSadaf Ebrahimi    versions_version_=`versions_shell_pdksh "${versions_shell_}"`
223*63d4e48fSSadaf Ebrahimi  fi
224*63d4e48fSSadaf Ebrahimi
225*63d4e48fSSadaf Ebrahimi  echo "${versions_version_}"
226*63d4e48fSSadaf Ebrahimi  unset versions_shell_ versions_version_
227*63d4e48fSSadaf Ebrahimi}
228*63d4e48fSSadaf Ebrahimi
229*63d4e48fSSadaf Ebrahimi# mksh - MirBSD Korn Shell (http://www.mirbsd.org/mksh.htm)
230*63d4e48fSSadaf Ebrahimi# mksh is a successor to pdksh (Public Domain Korn Shell).
231*63d4e48fSSadaf Ebrahimiversions_shell_mksh() {
232*63d4e48fSSadaf Ebrahimi  versions_shell_ksh
233*63d4e48fSSadaf Ebrahimi}
234*63d4e48fSSadaf Ebrahimi
235*63d4e48fSSadaf Ebrahimi# pdksh - Public Domain Korn Shell
236*63d4e48fSSadaf Ebrahimi# pdksh is an obsolete shell, which was replaced by mksh (among others).
237*63d4e48fSSadaf Ebrahimiversions_shell_pdksh() {
238*63d4e48fSSadaf Ebrahimi  _versions_have_strings
239*63d4e48fSSadaf Ebrahimi  strings "$1" 2>&1 \
240*63d4e48fSSadaf Ebrahimi  |grep 'PD KSH' \
241*63d4e48fSSadaf Ebrahimi  |sed -e 's/.*PD KSH \(.*\)/\1/;s/ /-/g'
242*63d4e48fSSadaf Ebrahimi}
243*63d4e48fSSadaf Ebrahimi
244*63d4e48fSSadaf Ebrahimiversions_shell_xpg4() {
245*63d4e48fSSadaf Ebrahimi  _versions_have_strings
246*63d4e48fSSadaf Ebrahimi  strings "$1" 2>&1 \
247*63d4e48fSSadaf Ebrahimi  |grep 'Version' \
248*63d4e48fSSadaf Ebrahimi  |sed -e 's/^@(#)Version //'
249*63d4e48fSSadaf Ebrahimi}
250*63d4e48fSSadaf Ebrahimi
251*63d4e48fSSadaf Ebrahimiversions_shell_zsh() {
252*63d4e48fSSadaf Ebrahimi  versions_shell_=$1
253*63d4e48fSSadaf Ebrahimi
254*63d4e48fSSadaf Ebrahimi  # Try a few different ways to figure out the version.
255*63d4e48fSSadaf Ebrahimi  # shellcheck disable=SC2016
256*63d4e48fSSadaf Ebrahimi  versions_version_=`echo 'echo ${ZSH_VERSION}' |${versions_shell_}`
257*63d4e48fSSadaf Ebrahimi  if [ -z "${versions_version_}" ]; then
258*63d4e48fSSadaf Ebrahimi    versions_version_=`${versions_shell_} --version : 2>&1`
259*63d4e48fSSadaf Ebrahimi    # shellcheck disable=SC2181
260*63d4e48fSSadaf Ebrahimi    if [ $? -eq 0 ]; then
261*63d4e48fSSadaf Ebrahimi      versions_version_=`echo "${versions_version_}" |awk '{print $2}'`
262*63d4e48fSSadaf Ebrahimi    else
263*63d4e48fSSadaf Ebrahimi      versions_version_=''
264*63d4e48fSSadaf Ebrahimi    fi
265*63d4e48fSSadaf Ebrahimi  fi
266*63d4e48fSSadaf Ebrahimi
267*63d4e48fSSadaf Ebrahimi  echo "${versions_version_}"
268*63d4e48fSSadaf Ebrahimi  unset versions_shell_ versions_version_
269*63d4e48fSSadaf Ebrahimi}
270*63d4e48fSSadaf Ebrahimi
271*63d4e48fSSadaf Ebrahimi# Determine if the 'strings' binary installed.
272*63d4e48fSSadaf Ebrahimi_versions_have_strings() {
273*63d4e48fSSadaf Ebrahimi  [ ${__versions_haveStrings} -ne ${ERROR} ] && return
274*63d4e48fSSadaf Ebrahimi  if eval strings /dev/null >/dev/null 2>&1; then
275*63d4e48fSSadaf Ebrahimi    __versions_haveStrings=${TRUE}
276*63d4e48fSSadaf Ebrahimi    return
277*63d4e48fSSadaf Ebrahimi  fi
278*63d4e48fSSadaf Ebrahimi
279*63d4e48fSSadaf Ebrahimi  echo 'WARN: strings not installed. try installing binutils?' >&2
280*63d4e48fSSadaf Ebrahimi  __versions_haveStrings=${FALSE}
281*63d4e48fSSadaf Ebrahimi}
282*63d4e48fSSadaf Ebrahimi
283*63d4e48fSSadaf Ebrahimiversions_main() {
284*63d4e48fSSadaf Ebrahimi  # Treat unset variables as an error.
285*63d4e48fSSadaf Ebrahimi  set -u
286*63d4e48fSSadaf Ebrahimi
287*63d4e48fSSadaf Ebrahimi  os_name=`versions_osName`
288*63d4e48fSSadaf Ebrahimi  os_version=`versions_osVersion`
289*63d4e48fSSadaf Ebrahimi  echo "os: ${os_name} version: ${os_version}"
290*63d4e48fSSadaf Ebrahimi
291*63d4e48fSSadaf Ebrahimi  for shell in ${VERSIONS_SHELLS}; do
292*63d4e48fSSadaf Ebrahimi    shell_version=`versions_shellVersion "${shell}"`
293*63d4e48fSSadaf Ebrahimi    echo "shell: ${shell} version: ${shell_version}"
294*63d4e48fSSadaf Ebrahimi  done
295*63d4e48fSSadaf Ebrahimi}
296*63d4e48fSSadaf Ebrahimi
297*63d4e48fSSadaf Ebrahimiif [ "${ARGV0}" = 'versions' ]; then
298*63d4e48fSSadaf Ebrahimi  versions_main "$@"
299*63d4e48fSSadaf Ebrahimifi
300