/usr/bin/gmtswitch is in gmt 5.4.3+dfsg-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | #!/bin/bash
#
# $Id: gmtswitch 19521 2017-12-27 22:38:24Z pwessel $
#
# Copyright (c) 1991-2018 by P. Wessel, W. H. F. Smith, R. Scharroo, J. Luis and F. Wobbe
# See LICENSE.TXT file for copying and redistribution conditions.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; version 3 or any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# Contact info: gmt.soest.hawaii.edu
#-------------------------------------------------------------------------------
# gmtswitch - switch between several installed GMT versions
#
is_numeric()
{ # Make sure argument is an integer
if [[ "$1" != *[!0-9]* ]]; then
return 0 # numeric
fi
return 1 # has a non-digit somewhere in it
}
exists()
{
if ! [ -d "${1}/bin" ]; then
# directory does not exist
echo "ERROR: ${1}/bin does not exist" >&2
exit 1
fi
}
help=0
if [ $# -gt 1 ]; then
help=1
fi
if [ $# -eq 1 ] && [ "X$1" = "X-help" ]; then
help=1
fi
if [ $help -eq 1 ]; then
cat << EOF >&2
usage: gmtswitch [version]
version, if present, is a unique text pattern identifying a GMT version,
e.g., GMT 5.1.1. If none are given then we list available versions and
let the user choose one. If the version is given as "init" OR it is the
very first time gmtswitch is run we will initialize the list of versions.
EOF
exit
fi
#--------------------------------------------------------------------------------
# Get the functionality of echo -n
#--------------------------------------------------------------------------------
if [ x`echo -n` = x ]; then # echo -n works
echon()
{
echo -n "$*"
}
elif [ x`echo -e` = x ]; then # echo -e works
echon()
{
echo -e "$*"'\c'
}
else # echo with escapes better work
echon()
{
echo "$*"'\c'
}
fi
cd ~
home=`pwd`
if [ ! -f "$home/.gmtversions" ]; then # No .gmtversions exists yet, first do that part
cat << EOF >&2
GMTSWITCH $Revision: 19521 $
gmtswitch helps you modify your environment to allow for the switching back and
forth between several GMT versions, in particular GMT 5 and previous GMT
versions such as GMT 4. First, we try to determine all the GMT versions
currently installed on this platform. If you have not already installed the
latest GMT 4 please enter q at the prompt and do that install first.
Otherwise, hit RETURN and please be patient while we search your system.
Note: Searching from / can take hours on systems with lots of slow network
drives. If that is your case, type q at the prompt to quit and instead
manually create the file ~/.gmtversions from your knowledge of what versions
are installed. Each line in that file should be the full directory path to
a top-level GMT directory (i.e., one that contains share, bin, lib). Or,
you can type d and then be asked for what top level dir to start the search
from, e.g., /home/mydir
EOF
echon "==> Press RETURN to continue (or q RETURN to quit, or d RETURN to set top dir): " >&2
read s
if [ "x$s" = "xq" ]; then
exit
elif [ "x$s" = "x" ]; then
top=/
else
echon "==> Enter top dir: " >&2
read top
fi
echon "--> Searching..." >&2
( find "$top" -type d -name 'GMT[345].*' -print > "$home/.gmtversions" ) 2> /dev/null
n=`cat "$home/.gmtversions" | wc -l | awk '{print $1}'`
cat << EOF >&2
There are $n GMT versions currently installed on your system.
Before we can allow for switching you must prepare your environment.
1. CSH OR TCSH USERS
In your .cshrc or .tcshrc file:
Change your path statement. Make sure it includes $home/this_gmt/bin
If $home contains spaces places the the above within double quotes.
2. BASH USERS
(re)Place these lines in your .profile file:
Change your PATH statement. Make sure it includes $home/this_gmt/bin
If $home contains spaces places the the above within double quotes.
3. SVN USERS:
You will have to manually add the path to the GMT directory since
it is not considered an official release.
After making these edits you must logout and back in again.
The next time you run gmtswitch you may do the switching.
EOF
exit
fi
if [ "X$1" = "XD" ]; then # First entry is default
line=`head -1 "$home/.gmtversions"`
exists "$line"
rm -f "$home/this_gmt"
ln -sf "$line" "$home/this_gmt"
elif [ $# -eq 1 ]; then
line=`grep $1 "$home/.gmtversions"`
nl=`grep $1 "$home/.gmtversions" | wc -l`
if [ $nl -eq 0 ]; then
echo "Version $1 is not listed among recognized GMT versions" >&2
echo "Run gmtswitch -help for more information" >&2
exit
fi
if [ $nl -ne 1 ]; then
echo "Version $1 is not unique among recognized GMT versions" >&2
echo "Run gmtswitch without argument and choose from a menu" >&2
exit
fi
exists "$line"
rm -f "$home/this_gmt"
ln -sf "$line" "$home/this_gmt"
else
n=`cat "$home/.gmtversions" | wc -l | awk '{print $1}'`
i=0
while [ $i -lt $n ]; do
i=`expr $i + 1`
line=`sed -n 's/#.*//;'${i}p "$home/.gmtversions"`
comment=`sed -n ${i}'s/.*# *\(.*\)/ (\1)/p' "$home/.gmtversions"`
version=`basename $line`
echo "$i. Select ${line}" >&2
done
echo "" >&2
v=-1
while [ $v -lt 0 ] || [ $v -gt $n ]; do
echon "Please choose a GMT version (1-$n) [1]: " >&2
read v
if [ "X$v" = "X" ]; then
v=1
fi
if ! is_numeric $v ; then
echo "ERROR: You must give an integer from 1-$n" >&2
v=-1
fi
done
line=`sed -n 's/#.*//;'${v}p "$home/.gmtversions"`
exists "$line"
rm -f "$home/this_gmt"
ln -sf "$line" "$home/this_gmt"
fi
|