我写了一个 Bash 脚本来帮助我管理一些符号链接。它是一些Stow命令的包装器。
当调用它,我传递两个命令行参数:一个命令(plug/ unplug/replug)和目录名(只是它的基本名称,而不是一个路径)。
该脚本被称为vlink,因此调用将是,例如:
vlink plug foo
Run Code Online (Sandbox Code Playgroud)
目录名(foo在上面的示例中)需要是我系统上其他地方特定目录的子目录之一。
因为仅存在三个可能的命令(plug/ unplug/replug)和一组特定的第三个参数可能的目录名,我想为它提供了一些选项卡完成。
我对编写 Bash 完成脚本有些熟悉,但是有没有办法为不在我的 $PATH 中并且仅打算从其父目录运行的可执行文件提供完成命令?
这可能有效:
_vlink () {
case $COMP_CWORD in
1) COMPREPLY=( $(compgen -W "plug unplug replug" "$2") ) ;;
2) local IFS=$'\n'
COMPREPLY=( $(cd /some/dir && compgen -d "$2") ) ;;
esac
}
complete -F _vlink vlink
Run Code Online (Sandbox Code Playgroud)
替换/some/dir为包含感兴趣的子目录的目录。(我假设您的目录名称中没有换行符。)
COMP_CWORD 是正在完成的单词的索引(0 是命令名称)所以,我们使用compgen:
-W,以及