Rlwrap似乎不配合“read -e”

时间:2011-09-09 13:12:06

标签: bash shell cygwin readline

有些常见问题的新转折:

在我的交互式脚本中,我预填充用户输入,如下所示:

#process_line.sh

INPUT=$1 # previous value
read -e -p "> " -i "$INPUT" INPUT

要实现命令历史记录,请致电process_line.sh

    rlwrap ./process_line.sh $INPUT

现在有了转折点:如果我有"read -e"选项,我可以编辑预填充输入但是没有命令历史记录,不利的是,我可以拥有命令历史记录,由rlwrap提供,没有"read -e"选项,但没有预先填充(即"read -i"没有真正做任何事情)。

当然,问题是我是否可以同时输入预填充和编辑AND命令历史记录。

谢谢!

2 个答案:

答案 0 :(得分:2)

关闭-e进行阅读。然后两个readline实现不会发生冲突。

要获得提示,您可以将-S "> "传递给rlwrap。

答案 1 :(得分:1)

这个用例已经在版本0.25之后的rlwrap手册中;究竟如何去做它取决于rlwrap版本。

在rlwrap 0.37中,你这样做:

INPUT = $(rlwrap -o -S“>” - P $ INPUT cat)

这种方法的优点是每个输入变量都可以给出自己的历史记录和完成列表(使用-f和-H选项)

cygwin版本(0.24)确实很古老,但自己编译rlwrap应该是无痛的。如果您愿意,可以构建静态链接版本(请参阅INSTALL文件以获取说明)并将其与脚本一起分发。