我正在为点文件管理实用程序编写 bash 完成脚本。该工具有一个命令dots diff [filename]
,将显示已安装的点文件和源点文件之间的差异。它还有一个命令dots files
列出所有托管点文件的路径(相对于源目录)。我想用 files 命令的输出来完成 diff 命令。
这是文件输出的示例
X11/xkb/symbols/evan-custom
X11/xorg.conf.d/10-dual-monitors.conf
X11/xorg.conf.d/10-keylayout.conf
bash/aliases
bash/bashrc
bash/completion.d/dots
bash/profiles/standard-user
bash/profiles/systemd-user
bspwm/bspwmrc
compton/compton.conf
fontconfig/fonts.conf
git/config
git/ignore
gtk-2.0/gtkrc
gtk-3.0/settings.ini
mysql/config
mysql/grcat
ncmpcpp/config
pulse/client.conf
pulse/daemon.conf
pulse/default.pa
ssh/config
sublime-text-3/Packages/User/Preferences.sublime-settings
sxhkd/sxhkdrc
termite/config
transmission-daemon/settings.json
vim/vimrc
使用这样的东西
COMPREPLY=( $(compgen -W "$(dots files)" -- $cur) )
有效,但是当 readline 列出可用选项时,它会列出完整路径(上面的列表)。
我希望它把这些词当作文件路径来对待,并且在列出建议时只列出第一个正斜杠。
例如,如果我键入dots diff [tab][tab]
以下内容,则应打印
X11/
bash/
bspwm/
compton/
fontconfig/
git/
gtk-2.0/
gtk-3.0/
mysql/
ncmpcpp/
pulse/
ssh/
sublime-text-3/
sxhkd/
termite/
transmission-daemon/
vim/
例如,如果我然后输入dots diff bash/[tab][tab]
然后它会显示
aliases
bashrc
completion.d/
profiles/
理想情况下,我希望它实际上将其视为一条路径,以便将 readline 选项更改mark-directories
为 off 将排除尾部斜杠。
我尝试过设置compopt -o filenames
,但这反而给出了文件名的建议,而不是最初的路径。