centos su 不自动完成用户名
centos su not autocomplete username
我的问题是用户名(它是 zyxing)在键入 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 评论]
这道题有这么简单吗?
我刚刚尝试了以下方法,但没有用。
- 确保我的帐户 bash env 是 /bin/bash(大多数人说 tab 不能工作因为 bash env 是 /bin/sh)
- 设置bash-完成和源脚本(也有人说必须安装这个插件和源脚本)
- setup bash-completion-extras(extras插件在centos7内测试中)
编辑跟随文件并重新登录后问题已解决:
文件路径:/usr/share/bash-completion/completions/su
从
更改第 42 行
COMPREPLY=( $(compgen -f -- $cur) )
到
COMPREPLY=( $(compgen -u -- $cur) )
原因可能是 su 无法使用用户名自动完成:
- 首先,由于名为 auto-complete
的插件,在键入 TAB
时自动完成工作正常
- 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
这个脚本读起来很容易,如果我们输入 su[space][TAB]
,我们知道执行了第 42 行。
但是有 return 当前目录的列表而不是我们 want.So 的用户列表,我只是将这一行更改为列出用户并重新登录,问题就解决了!
我的问题是用户名(它是 zyxing)在键入 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 评论]
这道题有这么简单吗?
我刚刚尝试了以下方法,但没有用。
- 确保我的帐户 bash env 是 /bin/bash(大多数人说 tab 不能工作因为 bash env 是 /bin/sh)
- 设置bash-完成和源脚本(也有人说必须安装这个插件和源脚本)
- setup bash-completion-extras(extras插件在centos7内测试中)
编辑跟随文件并重新登录后问题已解决:
文件路径:/usr/share/bash-completion/completions/su
从
COMPREPLY=( $(compgen -f -- $cur) )
到
COMPREPLY=( $(compgen -u -- $cur) )
原因可能是 su 无法使用用户名自动完成:
- 首先,由于名为 auto-complete 的插件,在键入
- centos7 和centos6 有很多区别,因为centos7 使用版本2.x 的自动完成插件,而centos6 1.x。
在阅读了命令su
的指定脚本后,我发现了一些奇怪的逻辑,整个脚本内容如下:
TAB
时自动完成工作正常
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 行。
但是有 return 当前目录的列表而不是我们 want.So 的用户列表,我只是将这一行更改为列出用户并重新登录,问题就解决了!