我刚刚使用hostinger.com 设置了一个VPS。操作系统是 Ubuntu 18.04。我创建了一个用户帐户,迈克。我很快意识到自动完成功能显然没有安装,所以查看了你是如何做到这一点的。出于某种原因(外壳类型?)我必须使用点而不是单词来获取源source
。
以 mike 身份登录,我这样做了:
sudo apt-get install bash-completion
(NB试图解决我后来尝试的问题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语法?我该如何检查这种事情?
(以root身份登录:)
...稍加搜索即可找到答案:
... 问题已解决(感谢 ender.qa)
更多信息
仔细阅读,我首先验证它实际上
/bin/sh
不是文件而是符号链接。根据现代版本的 Ubuntu,这是(在我运行之前usermod
)链接到/bin/dash
,我读到:bash 是事实上的标准(使用非常广泛),但它不是“标准”;Ubuntu 上的 sh 使用 dash,这是一个符合 Posix 的 shell,所以它真的很标准。我的建议是尽可能多地使用破折号来编写脚本,尤其是服务器端脚本。尽管 bash 更具表现力,但 dash 运行速度更快且更安全(此处,Rick-777 评论)
这让您想知道为什么 Hostinger.com 的
root
帐户使用默认创建的用户帐户bash
而不是标准帐户。dash
超出我的工资等级。