bash - 替代另一个命令的 bash 完成脚本
问题描述
我想制作一个“完成脚本”,将虚拟命令 ( g
) 替换为另一个命令 ( cd
)。
我想g dl<Tab>
动态转换成cd ~/dl/
.
别名不是我想要的,因为我想继续输入。的参数是使用键/值存储g
检索的
我试图为数组赋值$COMP_WORDS
以更改用户编写的文本,但它不起作用:
_g_completions() {
local FILE="$HOME/.config/kv.awk/bookmarks.txt"
local COMPLEN="${#COMP_WORDS[@]}"
if [ "${COMP_WORDS[$COMP_CWORD]}" -lt 3 ]
then
# list keys
COMPREPLY=($(compgen -W "$(awk '/^[A-Za-z]/ {print tolower($1)}' "$FILE")" -- "$CURRENT"))
else
# subsitute command
COMP_WORDS[0]="cd"
COMP_WORDS[1]="$(kv.awk bookmarks get "${COMP_WORDS[1]}")"
fi
}
complete -F _g_completions g
解决方案
推荐阅读
- selenium - 执行功能文件时显示错误“空指针异常”
- xamarin.forms - Xamarin Forms 如何向自定义控件添加行为
- javascript - mime 类型不可执行
- apache-kafka - 对于 azure 提供的实时流媒体,我必须从 azure 使用哪个服务?
- kendo-ui - 如何在面板栏中使点击导航成为有条件的
- javascript - 拆分字符串并获取倒数第二个逗号
- ruby - 当我给出颜色名称时,我怎么能得到一个十六进制代码
- php - 如何删除包装长文本的特定单词的html标签
- php - 即使路径正确,图像也无法加载
- gradle - Gradle Copy 任务与 eachFile if 子句工作不一致,我做错了什么?