bash - bash 自动完成功能可以与内置的“source”命令一起使用吗?
问题描述
我有一个项目,我会定期切换不同版本的库。我有一个脚本set_lib
,它将库版本作为输入,然后设置相关的环境变量。有时我想获取这个脚本并手动构建/运行东西。我知道如何为函数/脚本配置自动完成功能,但是对于采购脚本呢?那是
>source set_lib v<tab><tab>
ver1 ver2 ver3
另外,我想source
在不与set_lib
.
编辑:正如建议的那样,我尝试了以下
_comp_set_lib() {
if [ ${COMP_WORDS[1]} == 'set_lib' ]; then
COMPREPLY=( "set_lib ver1" "set_lib ver2" )
fi
}
complete -o bashdefault -F _comp_set_lib source
$COMP_CWORD
作为第二个位置给我带来了问题。以上没有按预期工作并给了我
>source set_lib <tab>
source set_lib ver
解决方案
我认为最方便的方法是定义一个包装函数source set_lib ...
:
function set_lib() {
source set_lib "$@"
}
然后为该功能设置自动完成。
但是,如果您更喜欢键入source set_lib
而不仅仅是set_lib
,那么您可以将自动完成函数附加到source
内置函数,并在决定是否返回任何自定义匹配项之前检查"${COMP_WORDS[1]}"
(意味着 的第一个参数source
)是否等于。set_lib
(当使用complete
内置设置自动完成时,使用-o bashdefault
标志告诉它,如果您的函数没有返回任何匹配项,那么您希望 Bash 回退到其默认逻辑以获取建议。)
推荐阅读
- ruby - 如何多次运行标记黄瓜测试?
- java - 在 ListView simple_list_item_2 中显示两个数组列表
- python - 如何隐藏 json 转储文件
- javascript - 按表行中的组更改数组中的索引
- android-studio - 如何在不安装 Android Studio 的情况下运行 Android 仿真
- javascript - 卸载组件后如何调用函数?
- regression - Logit 模型和 Logistic 回归之间的区别?
- postgresql - 使用 sysrefcursor 返回标志值,如 Oracle
- typescript - 打字稿:映射类型,从联合中剥离字段
- c# - 无法从 MongoDB 文档中读取 TimeZoneInfo