如何在shell脚本中使用向上箭头键来获取上一个命令

时间:2015-05-06 05:14:50

标签: bash shell unix

我正在尝试编写具有一些基本功能的控制台。 这就是我在做的事情。

function help()
{
        echo "add(a,b,...)"
}

function add()
{
arg=$(echo $1 | cut -d"(" -f2)
sum=0
for number in `echo ${arg} | sed -e 's/[,) ]\+/\n/g'` ; do
        sum=$(($sum + $number))
done
echo $sum
}

while true
do

echo -n "mycon@avi>>"
read command
opt=$(echo "$command" | cut -d"(" -f1)
case $opt in
"exit"|"q")
        exit
;;
"help")
        help
;;
"add")
        add $command
;;
esac
done

我将此文件保存为mycon 当我运行此脚本./mycon

mycon@avi>>add(2,3)
5
mycon@avi>>

现在,在我按下箭头键的那一刻,我想得到上面的add(2,3)命令。这样做的方法是什么?

谢谢

1 个答案:

答案 0 :(得分:6)

仅限Bash解决方案:

  1. read command更改为read -e command,以便bash启用readline库。

  2. 添加命令history -s "$command"以包含读入历史记录的行。

  3. 请注意,read command会在将行指定给command之前从已键入的命令中删除尾随空格,除非您在IFS设置为空字符串的情况下调用它。此外,read通常会将反斜杠视为转义字符,这通常是不受欢迎的;您可以使用-r标记来抑制该行为。最后,您可以read使用-p选项打印提示,该提示可以更好地使用readline。所以你的最终序列可能如下所示:

    while IFS= read -e -p "mycon@avi>> " command; do
      history -s "$command"
      # ... process the command
    done
    

    (使用read命令作为while语句中的条件会导致while循环在用户输入EOF字符时终止。)

    有关readhistory的详细信息,请使用内置bash help命令(help read / help history