⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdhist.t

📁 一个开放源代码的 AT&T 的 Korn Shell 的复制品, 支持大多数 ksh89 的特性。
💻 T
字号:
name: cd-historydescription:	Test someone's CD history package (uses arrays)# Fails on OS/2, since directory names are prepended with drive letter.category: !os:os2stdin:	# go to known place before doing anything	cd /		alias cd=_cd	function _cd	{		typeset -i cdlen i		typeset t			if [ $# -eq 0 ]		then			set -- $HOME		fi			if [ "$CDHISTFILE" -a -r "$CDHISTFILE" ] # if directory history exists		then			typeset CDHIST			i=-1			while read -r t			# read directory history file			do				CDHIST[i=i+1]=$t			done <$CDHISTFILE		fi			if [ "${CDHIST[0]}" != "$PWD" -a "$PWD" != "" ]		then			_cdins				# insert $PWD into cd history		fi			cdlen=${#CDHIST[*]}			# number of elements in history			case "$@" in		-)					# cd to new dir			if [ "$OLDPWD" = "" ] && ((cdlen>1))			then				'print' ${CDHIST[1]}				'cd' ${CDHIST[1]}				_pwd			else				'cd' $@				_pwd			fi			;;		-l)					# print directory list			typeset -R3 num			((i=cdlen))			while (((i=i-1)>=0))			do				num=$i				'print' "$num ${CDHIST[i]}"			done			return			;;		-[0-9]|-[0-9][0-9])			# cd to dir in list			if (((i=${1#-})<cdlen))			then				'print' ${CDHIST[i]}				'cd' ${CDHIST[i]}				_pwd			else				'cd' $@				_pwd			fi			;;		-*)					# cd to matched dir in list			t=${1#-}			i=1			while ((i<cdlen))			do				case ${CDHIST[i]} in				*$t*)					'print' ${CDHIST[i]}					'cd' ${CDHIST[i]}					_pwd					break					;;				esac				((i=i+1))			done			if ((i>=cdlen))			then				'cd' $@				_pwd			fi			;;		*)					# cd to new dir			'cd' $@			_pwd			;;		esac			_cdins					# insert $PWD into cd history			if [ "$CDHISTFILE" ]		then			cdlen=${#CDHIST[*]}		# number of elements in history				i=0			while ((i<cdlen))			do				'print' -r ${CDHIST[i]}	# update directory history				((i=i+1))			done >$CDHISTFILE		fi	}		function _cdins					# insert $PWD into cd history	{						# meant to be called only by _cd		typeset -i i			((i=0))		while ((i<${#CDHIST[*]}))		# see if dir is already in list		do			if [ "${CDHIST[$i]}" = "$PWD" ]			then				break			fi			((i=i+1))		done			if ((i>22))				# limit max size of list		then			i=22		fi			while (((i=i-1)>=0))			# bump old dirs in list		do			CDHIST[i+1]=${CDHIST[i]}		done			CDHIST[0]=$PWD				# insert new directory in list	}			function _pwd	{		if [ -n "$ECD" ]		then			pwd 1>&6		fi	}	# Start of test	cd /tmp	cd /bin	cd /etc	cd -	cd -2	cd -lexpected-stdout:	/bin	/tmp	  3 /	  2 /etc	  1 /bin	  0 /tmp---

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -