我有一个叫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
当进入repos
与tab然而现在,我得到一个错误信息:
无法访问“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] 删除。
我来说两句