我的问题是在键入tab时用户名(不是很简单)不是自动完成的,在这里有任何方法可以解决此问题,或者只是给我一个调试建议。
ssh as user a
sudo -i
su z[tab]
关于系统和一些有用的信息,如下:
[root@VMS79253 ~]# cat /etc/system-release
CentOS Linux release 7.1.1503 (Core)
[root@VMS79253 ~]# rpm -qa| grep -i completion
bash-completion-2.1-6.el7.noarch
[root@VMS79253 ~]# cat /etc/passwd
...
zyxing:x:1005:1005::/home/zyxing:/bin/bash
[2018-11-21评论]
这个问题容易吗?
我刚刚尝试了以下操作,但不起作用。
答案 0 :(得分:0)
编辑关注文件并重新登录后,问题已解决:
文件路径:/ usr / share / bash-completion / completions / su
更改42行,从
COMPREPLY=( $(compgen -f -- $cur) )
到
COMPREPLY=( $(compgen -u -- $cur) )
TAB
时自动完成功能起作用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
阅读此脚本很容易,并且我们知道如果键入su[space][TAB]
,则执行了第42行。
但是返回的是当前目录列表,而不是我们想要的用户列表。因此,我只是将这一行更改为列出用户并重新登录,问题已解决!