列出特定路径中的目录作为 bash 脚本的自动完成选项?

贾坦

我有一个叫bash函数回购在我的.bash_profile,我想为它添加自动填充功能,其中列出了特定目录的内容。我正在尝试使用complete命令来实现这一点

简而言之,我尝试过的:

创建了一个名为repos_complete.bash的文件,其中包含以下代码。此后我运行source repos_complete.bash以确保它适用于repos脚本。

代码repos_complete.bash

complete -A directory repos

到目前为止的结果:如果我输入repos,然后按tab,它将列出当前目录的内容。然而,我想要的是列出另一个目录的内容,例如~/source/repos/.

我试图通过用以下内容替换repos_complete.bash的内容来做到这一点

 complete -C ls ~/source/repos repos

当进入repostab然而现在,我得到一个错误信息:

无法访问“repos”:没有这样的文件或目录

在我看来,好像-C(之后接受命令)将整行解释为命令,包括最后一个“ repos”,而不是仅仅将第一部分 ( ls ~/source/repos) 作为命令应用于函数repos,这就是我正在努力实现。

关于以正确方式传递ls <some path>命令的正确方法的任何提示


注意:我应该指出这是在 Windows 10 下的 git bash shell 的上下文中运行的,以防万一会有什么不同。

安尼萨内

我认为你需要填充COMPREPLY数组。我认为这可以工作:

_repos()
{
    local cur;
    local base=~/source/repos/
    _get_comp_words_by_ref cur;
    cur="$base$cur"
    _filedir
    COMPREPLY=("${COMPREPLY[@]#$base}")
} && complete -o nospace -F _repos repos

如果要使用该-C选项,可以使用下面的这种方法。(请注意,我尚未针对包含特殊字符的文件名对其进行评估。)

_repos()
{
    ( cd ~/source/repos; printf "%s\n" "$2"* )
} && complete -o nospace -C _repos repos

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使bash停止选项卡自动完成隐藏目录

在 bash 脚本中添加选项卡完成

bash 脚本列出路径中的所有目录,将字符和 CD 转义到每个目录中以执行操作

bash脚本,用于在目标文件路径中的特定目录上进行迭代并忽略某些目录

Bash自动完成:不列出文件或目录

Bash / zsh选项卡的自动完成功能:给定初始命令,请忽略具有自动完成功能的目录中的某些文件

具有自动完成功能中的用户定义功能的Bash脚本

在emacs中编辑shell脚本时可以使用bash自动完成功能吗?

bash脚本中的自动补全

如何通过脚本列出Bash中的目录和文件?

如何为〜/ bin中的脚本启用选项卡自动完成功能?

在shell脚本中自动完成

如何自定义bash自动完成功能以在另一个目录中列出文件

bash中的自动完成前缀命令

SSH会话中的Bash自动完成

连接bash脚本中的目录路径时出错

如何在bash脚本中包含包含文件的目录路径

bash脚本执行中的rsync未知选项

Unix在bash脚本中添加grep选项

bash自动完成个人命令:无法在选项后自动完成参数

bash脚本中的自动git pull

bash脚本中的自动docker登录

Bash脚本-基于数组数据自动完成用户输入

禁用自动完成中的退格删除选项

目录路径作为bash中的命令行参数

防止路径自动完成在bash中使用CDPATH?

自定义命令的Bash自动完成子目录

将tar存档输出到bash脚本中的特定路径

在bash脚本中获取grandparent目录-在其路径中重命名目录文件