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



我试图用一些基本功能编写控制台。这是我在做的。

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. read command更改为 read -e command,以便bash将启用readline库。

  2. 添加命令 history -s "$command"以包含读取行中的行。

请注意,在将行分配给command之前,read command将从键入命令中删除taffering tailting taxpace,除非您将其用IFS设置为空字符串。同样,read通常会将后斜切视为逃生角色,通常是不希望的。您可以使用-r标志抑制该行为。最后,您可以让read打印提示,该提示可以使用-p选项与Readline更好地工作。因此,您的最后序列可能看起来像这样:

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

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

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

相关内容

  • 没有找到相关文章

最新更新