VPS 上的自动完成问题

VPS 上的自动完成问题

我刚刚通过 Hostinger.com 设置了一个 VPS。操作系统是Ubuntu 18.04。我创建了一个用户帐户,迈克。我很快意识到自动完成功能显然没有安装,所以查看了你是如何做到这一点的。由于某种原因(shell 的类型?),我必须使用点来获取来源,而不是使用单词source

以迈克身份登录,我这样做了:

sudo apt-get install bash-completion

(注意试图解决我后来尝试过的问题sudo apt-get install --reinstall bash-completion

...我将这一行添加到 /home/mike/.bashrc 中:

. /etc/bash_completion

事实上这个文件由一行组成:

. /usr/share/bash-completion/bash_completion

目前的情况是,当我以 root 身份登录时,我可以通过执行以下操作来获得自动完成功能:

$ . /home/mike/.bashrc

但是当以 Mike 身份登录时,相同的命令给出:

$ . /home/mike/.bashrc
-su: 26: /usr/share/bash-completion/bash_completion: Syntax error: "(" unexpected

在寻找答案时,我猜测问题可能是由别名冲突引起的。但现在以 mike 身份登录时没有别名,但问题仍然存在。

我正在尝试(除其他外)理解“-su: 26”的实际含义。这似乎是一个线路参考。但该文件的第 26 行实际上是空白的。

我现在想做的是浏览 /usr/share/bash-completion/bash_completion,注释掉行,直到事情开始有意义。但它是一个大文件!

显然,其中一个令人好奇的方面是,当我以 root 身份登录时它可以工作,但当我以 mike 身份登录时则不能。

之后
scp将本地计算机中的 bash_completion 文件复制到 VPS 并用它来替换现有的文件(首先将后者重命名)。再次强调,当 root 工作正常时进行采购。同样,以 Mike 身份登录时进行采购会产生(几个)错误:

$ . /home/mike/.bashrc
-su: 29: /usr/share/bash-completion/bash_completion: [[: not found
-su: 35: /usr/share/bash-completion/bash_completion: [[: not found
-su: 51: /usr/share/bash-completion/bash_completion: shopt: not found
-su: 57: /usr/share/bash-completion/bash_completion: complete: not found
-su: 62: /usr/share/bash-completion/bash_completion: complete: not found
[... more... ]

有什么建议么?是否可能是由于某种原因,迈克帐户使用了不同的 shell?不同的 shell 语法?我该如何检查这种事情?

答案1

(以 root 身份登录:)

root@vps46990199:~# getent passwd mike
mike:x:1000:1000::/home/mike:/bin/sh
root@vps46990199:~# getent passwd root
root:x:0:0:root:/root:/bin/bash

...稍微搜索一下就能找到答案:

root@vps46990199:~# usermod -s /bin/bash mike

...问题解决了(感谢 ender.qa)

更多信息
阅读周围,我首先验证它实际上/bin/sh不是一个文件,而是一个符号链接。根据现代版本的 Ubuntu 这曾是(在我跑之前usermod)链接到/bin/dash,我读到:

bash 是事实上的标准(非常广泛使用),但它不是“标准”; Ubuntu 上的 sh 使用 dash,这是一个兼容 Posix 的 shell,所以它确实是标准的。我的建议是在脚本编写中尽可能多地使用破折号,尤其是服务器端脚本。尽管 bash 更具表现力,但 dash 运行速度更快且更安全这里,Rick-777 的评论)

这让您想知道为什么 Hostinger.com 的root帐户使用bash而不是dash作为标准帐户,就像默认创建的用户帐户一样。超出了我的工资水平。

相关内容