Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103670677
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 23:22:16

作者:寂寞烈火   
 
#!/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
阅读(399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~