我试图用一些基本功能编写控制台。这是我在做的。
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)
命令。这样做的方法是什么?
谢谢
唯一的解决方案:
-
将
read command
更改为read -e command
,以便bash将启用readline库。 -
添加命令
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字符。)
有关read
和history
的更多信息,请使用内置bash help
命令(help read
/help history
)