Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / examples / functions / kshenv
index 35cc212..9faba08 100644 (file)
@@ -5,6 +5,24 @@
 # Chet Ramey
 # chet@ins.CWRU.Edu
 #
+
+#
+#  Copyright 2002 Chester Ramey
+#
+#   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 2, or (at your option)
+#   any later version.
+#
+#   TThis 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, write to the Free Software Foundation,
+#   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
 #
 # These are definitions for the ksh compiled-in `exported aliases'.  There
 # are others, but we already have substitutes for them: "history", "type",
@@ -109,27 +127,39 @@ $1 == "'$cmd'" && $2 == "()" {printit=0; next; }
 #      whence -v "$*"
 #}
 
+#
+# ksh-like `cd': cd [-LP] [dir [change]]
+#
 cd()
 {
+       OPTIND=1
+       while getopts "LP" opt
+       do
+               case $opt in
+               L|P)    CDOPTS="$CDOPTS -$opt" ;;
+               *)      echo "$FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
+                       return 2;;
+               esac
+       done
+
+       shift $(( $OPTIND - 1 ))
+
        case $# in
-       0)      builtin cd "$HOME" ;;
-       1)      builtin cd "$@" ;;
-       2)      old="$1"
-               new="$2"
-               # dir=$(echo "$PWD" | sed "s:$old:$new:g")
-               dir=${PWD//$old/$new}
-               case "$dir" in
-               "$PWD") case "$PWD" in
-                       *$old*) ;;
-                       *) echo "$FUNCNAME: bad substitution" >&2 ; return 1 ;;
-                       esac ;;
-               *)      echo "$dir"
-                       builtin cd "$dir"
-                       ;;
+       0)      builtin cd $CDOPTS "$HOME" ;;
+       1)      builtin cd $CDOPTS "$@" ;;
+       2)      old="$1" new="$2"
+               case "$PWD" in
+               *$old*) ;;
+               *)       echo "${0##*/}: $FUNCNAME: bad substitution" >&2 ; return 1 ;;
                esac
+
+               dir=${PWD//$old/$new}
+
+               builtin cd $CDOPTS "$dir" && echo "$PWD"
+
                ;;
-       *)      echo "$FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
-               return 1 ;;
+       *)      echo "${0##*/}: $FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
+               return 2 ;;
        esac
 }
 
@@ -195,7 +225,7 @@ substring ()
                ;;
        esac
        # test for too few or too many arguments
-       if [ x"$1" = x -o $# -gt 2 ]; then
+       if [ x"$1" = x ] || [ $# -gt 2 ]; then
                print -u2 'substring: bad argument count'
                return 1
        fi