#!/bin/bash
#名称:hist
#BSD风格的history命令
#为避免和真正的history命令冲突,可以在/etc/inputrc
#中加入:Control-a:"/path/hist \C-m" //按ctrl+A启动此history命令
#当然,最好别和其他的ctrl组合冲突
#按键盘说明:^[[A和^[[B上下翻页键,^[由ctrl+v+[得到
#redhat+bash测试通过 :=)
#得到r2007兄指点,特此感谢! ^_^
#BEGIN
#
echo -ne '\e[6n';read -sdR pos
pos=${pos#*[}
line=${pos%%;*}
col=${pos##*;}
hint='History command list>>'
file="$HOME/.bash_history"
cat $HOME/.bash_history
doo () {
while true;do
echo -ne "\\033[31m\\033[$line;${col}H$hint\\033[0m"
read -s -n3
case $REPLY in
^[[A) echo -en "\\033[A";((i--));echo -ne "\\033[$line;${#hint}H$i=>$(sed -n "$i"p $1)\\033[K"
;;
^[[B) echo -ne "\\033[B";((i++));echo -ne "\\033[$line;${#hint}H$i=>$(sed -n "$i"p $1)\\033[K"
;;
"") echo;eval $(sed -n "$i"p $1) 2>/dev/null;break
;;
esac
done
echo -e "\\033[0m"
}
read -s -n1 char
if [[ -n $char ]];then
sed -n "/^$char/p" $file|tee tmp$$
i=$(sed -n '$=' tmp$$)
doo tmp$$
rm tmp$$ 2>/dev/null
else
i=$(sed -n '$=' $file)
doo $file
fi
#END