Проблема была решена после редактирования, последующего файла и повторного входа:
Путь к файлу: / usr / share / bash-creation / завершений / su
изменить 42 строку с
COMPREPLY=( $(compgen -f -- $cur) )
до
COMPREPLY=( $(compgen -u -- $cur) )
Возможно, причина в том, что su не заполняется автоматически с именем пользователя:
- Во-первых, автозаполнение работало при наборе
TAB
из-за плагина с именем auto-complete
- Существует много различий между centos7 и centos6, потому что centos7 использует плагин автозаполнения с версией 2.x, но centos6 1.x.
Я обнаружил некоторую странную логику после прочтения указанного сценария, сработавшего для команды su
, весь текст сценария выглядит следующим образом:
1 _su_module()
2 {
3 local cur prev OPTS
4 COMPREPLY=()
5 cur="${COMP_WORDS[COMP_CWORD]}"
6 prev="${COMP_WORDS[COMP_CWORD-1]}"
7 case $prev in
8 '-'|'-u'|'--user')
9 COMPREPLY=( $(compgen -u -- $cur) )
10 return 0
11 ;;
12 '-g'|'--group'|'-G'|'--supp-group')
13 COMPREPLY=( $(compgen -g -- $cur) )
14 return 0
15 ;;
16 '-s'|'--shell')
17 COMPREPLY=( $(compgen -W "$(chsh -l)" -- $cur) )
18 return 0
19 ;;
20 '-h'|'--help'|'-V'|'--version')
21 return 0
22 ;;
23 esac
24 case $cur in
25 -*)
26 OPTS=" --user
27 --preserve-environment
28 --group
29 --supp-group
30 --login
31 --command
32 --session-command
33 --fast
34 --shell
35 --help
36 --version"
37 COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
38 return 0
39 ;;
40 esac
41 compopt -o filenames
42 COMPREPLY=( $(compgen -f -- $cur) )
43 return 0
44 }
45 complete -F _su_module su
46 complete -F _su_module runuser
Этот скрипт легко прочитать, и мы знаем, что строка 42 была выполнена, если мы введем su[space][TAB]
.
Но был возвращен список текущего каталога, а не список пользователей, что мы хотим. Так что я просто изменил эту строку, чтобы вывести список пользователей и заново войти, проблема была решена!