我正在尝试编写具有一些基本功能的控制台.这就是我在做的事情.
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
Run Code Online (Sandbox Code Playgroud)
我在mycon
运行此脚本时保存此文件./mycon
mycon@avi>>add(2,3)
5
mycon@avi>>
Run Code Online (Sandbox Code Playgroud)
现在,在我按下箭头键的那一刻,我想得到上面的add(2,3)命令.这样做的方法是什么?
谢谢
仅限Bash的解决方案:
更改read command为read -e commandbash将启用readline库.
添加命令history -s "$command"以将读取的行包括在历史记录中.
请注意,read command在将行指定给行之前,将从类型化命令中删除尾随空格command,除非您使用IFSset设置为空字符串来调用它.此外,read通常会将反斜杠视为转义字符,这通常是不受欢迎的; 你可以使用-r标志来抑制该行为.最后,您可以read使用该-p选项打印提示,该提示可以更好地使用readline .所以你的最终序列可能如下所示:
while IFS= read -e -p "mycon@avi>> " command; do
history -s "$command"
# ... process the command
done
Run Code Online (Sandbox Code Playgroud)
(read如果用户输入EOF字符,则使用该命令作为while语句中的条件会导致while循环终止.)
有关详细信息read,并history使用内置在bash help命令(help read/ help history)