我正在尝试编写具有一些基本功能的控制台。 这就是我在做的事情。
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)
命令。这样做的方法是什么?
谢谢
答案 0 :(得分:6)
仅限Bash解决方案:
将read command
更改为read -e command
,以便bash启用readline库。
添加命令history -s "$command"
以包含读入历史记录的行。
请注意,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字符时终止。)
有关read
和history
的详细信息,请使用内置bash help
命令(help read
/ help history
)