#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) 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 General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# post bash-4.3 changes to how command -p works (avoid modifying $PATH)

: ${TMPDIR=/tmp}
xpath=/usr/local/bin:/usr/GNU/bin:/usr/bin:/bin:.

# set a value of PATH we can test for; versions of bash up to and including
# bash-4.3 would set $PATH while running command -p
PATH=$xpath
export PATH
command -p sh -c 'echo $PATH'

PATH=${TMPDIR}
command -pv cat	>/dev/null || echo "cannot find cat using standard path"
command -p cat < /dev/null
#hash

PATH=$xpath
command -pv cat >/dev/null || echo "cannot find cat using xpath"
PATH=$TMPDIR command -pv cat >/dev/null || echo "cannot find cat using standard path with PATH=\$TMPDIR"
PATH= command -pv cat >/dev/null || echo "cannot find cat using standard path with empty \$PATH"
PATH=$TMPDIR command -v cat >/dev/null || echo "cannot find cat in \$TMPDIR"
PATH= command -v cat >/dev/null || echo "cannot find cat with empty \$PATH"

echo PATH = $PATH
hash cat

PATH=$xpath

PATH=$TMPDIR command -pv cat >/dev/null || echo "cannot find cat using stdpath with hash"
PATH= command -pv cat >/dev/null || echo "cannot find cat using stdpath with hash"
PATH=$TMPDIR command -v cat >/dev/null || echo "cannot find cat in \$TMPDIR with hash"
PATH= command -v cat >/dev/null || echo "cannot find cat with empty \$PATH with hash"

echo PATH = $PATH
