| # |
| # 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 $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 "${0##*/}: $FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2 |
| return 2 ;; |
| esac |
| } |