Slackware-current 上的情况非常奇怪。用libvirt-6.8.0源码编译。
让我们开始bash补全
virst st<TAB>
virsh start OK
virsh start --dom<TAB>
virsh start --domain OK
virsh start --domain <TAB>
Display all 235 possibilities? (y or n)
235种可能性?我只配置了 15 个域,235 个文件是我在 home 中的文件和目录,似乎 bash 完成无法完成域列表,其他命令(virsh domiflist、virsh dominfo、virsh domifaddr)可以很好地使用制表符完成。所有期望域列表。我尝试删除所有 libvirt 文件,然后重新安装 libvirt,但什么也没有...什么可以阻止我的域 bash 完成?
我尝试过调试 bash
set -x
运行命令
virsh start --domain ce<TAB>
+ local flag_all=1 array ret a b ifaces nwfilters files
+ COMPREPLY=()
+ cur=cen
+ prev=--domain
+++ virsh -h
+++ grep '^ '
+++ cut '-d ' -f5
+++ virsh -h
+++ cut -d= -f1
+++ grep '\--'
+++ cut '-d ' -f7
++ echo '-c
-d
-e
-h
-k
-K
-l
-q
-r
-t
-v
-V
attach-device
attach-disk
...
very long list of virsh commands
cd
echo
exit
help
pwd
quit
connect' '--connect
--debug
--escape
--help
--keepalive-interval
--keepalive-count
--log
--quiet
--readonly
--timing'
+ cmds='-c
-d
-e
-h
-k
-K
-l
-q
-r
-t
-v
-V
attach-device
...
very long list of virsh commands
echo
exit
help
pwd
quit
connect --connect
--debug
--escape
--help
--keepalive-interval
--keepalive-count
--log
--quiet
--readonly
--timing'
++ virsh help
++ grep '^ '
++ cut '-d ' -f5
+ cmds_help='attach-device
attach-disk
attach-interface
autostart
blkdeviotune
blkiotune
blockcommit
...very long list of virsh commands
cd
echo
exit
help
pwd
quit
connect'
+ case "$prev" in
++ _virsh_list_domains 1
++ local flag_all=1 flags
++ '[' 1 -eq 1 ']'
++ flags=--all
++ virsh -q list --all
++ cut '-d ' -f7
++ awk '{print $1}'
+ doms=
+ COMPREPLY=($(compgen -W "$doms" -- "$cur"))
++ compgen -W '' -- cen
+ return 0
答案1
找到解决方案。我认为 libvirt 读取完成
/usr/share/bash-completion/completions/vsh
但从“入侵者”旧文件中读取/etc/bash_completion.d/virsh_bash_completion
我解决了将此文件复制到 /etc/bash_completion.d/virsh_bash_completion
sudo cp /usr/share/bash-completion/completions/vsh /etc/bash_completion.d/virsh_bash_completion
现在一切正常。