相关疑难解决方法(0)

修改 bash 脚本中的 $READLINE_LINE 和 $READLINE_POINT 值

我已经在 stackoveflow 上问过这个问题,但没有得到答案,而且意见很少。我想我会在这里发帖,因为应该有更多的 bash 用户,而且有人可能已经偶然发现了这个问题。根据SO Meta,只要我链接到跨网站帖子,就可以这样做。如果我错了,请告诉我,我会删除这个问题。


我试图通过将自定义脚本绑定到一个键来实现ksh路径自动完成的一些功能bash。为了做到这一点,我的脚本读取来自信息bind变量$READLINE_LINE,并$READLINE_POINT和尝试更新这些值。虽然我可以毫无问题地读取行缓冲区,但我似乎无法修改这些变量并更新当前行。

引用绑定手册页,这应该可以工作:

当 shell-command 被执行时,shell 将 READLINE_LINE 变量设置为 readline 行缓冲区的内容,并将 READLINE_POINT 变量设置为插入点的当前位置。如果执行的命令改变了 READLINE_LINE 或 READLINE_POINT 的值,这些新值将反映在编辑状态

我绑定了我的 sciptbind -x '"\t":autocomplete.sh'并做了这样的事情:

#!/bin/bash
#autocomplete.sh
echo $READLINE_LINE $READLINE_POINT   #I can read the current line values
EXPANSION=($(magical_autocomplete $READLINE_LINE))
#we store the desired value for the line in ${EXPANSION[0]}
[[ ${#EXPANSION[@]} -gt 1 ]] && echo ${EXPANSION[@]:1} #we echo the match if there are …
Run Code Online (Sandbox Code Playgroud)

bash autocomplete

6
推荐指数
1
解决办法
870
查看次数

使用 bind 读取当前命令行

bind -x每当按下某个键序列时,我都会使用它来执行脚本。

例如,我有一个/usr/local/bin/foo包含内容的脚本

#!/bin/bash
echo foo
Run Code Online (Sandbox Code Playgroud)

如果我运行,bind -x '" ": /usr/local/bin/foo'那么每次我按两次空格键时都会回显“foo”。到现在为止还挺好。

我希望能够做的是访问(并理想地修改)正在输入的当前命令。如果我输入some really long command(末尾有两个空格),我的脚本会被执行,但它怎么能看到我已经输入some really long command并将其更改为some other long command

bash readline

4
推荐指数
1
解决办法
590
查看次数

标签 统计

bash ×2

autocomplete ×1

readline ×1