36 lines
635 B
Text
36 lines
635 B
Text
![]() |
#
|
||
|
# 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
|
||
|
}
|