我刚用hostinger.com设置了一个VPS。操作系统是Ubuntu18.04。我创建了一个用户帐户迈克。我很快意识到,自动完成显然没有安装,所以看看你如何做到这一点。出于某种原因(壳的类型?)我必须用一个点来来源,而不是用source这个词。
当mike登录时,我这样做了:
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完成/bash_完备,注释掉行,直到事情开始有意义为止。但这是个大文件!
显然,这其中一个奇怪的方面是,当我以root身份登录时,它是有效的,而当我以mike身份登录时,它却不起作用。
后来,我将本地机器中的scp文件保存到VPS中,并使用它替换现有的bash_completion文件(第一个改名)。同样,当根用户正常工作时,请重新查找。再次,当登录时,当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... ]有什么建议吗?可能是因为某种原因,mike帐户使用的是不同的shell?一种不同的shell语法?我该如何检查这类事情呢?
发布于 2019-12-03 18:05:12
(以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)
more info四处阅读,我首先验证/bin/sh实际上不是一个文件,而是一个符号链接。根据Ubuntu的现代版本,这是(在我运行usermod之前)链接到/bin/dash,我读到:
bash是一个事实上的标准(非常广泛地使用),但它不是“标准”;Ubuntu上的sh使用破折号,这是一个符合Posix的shell,所以它是真正的标准。我的建议是尽可能频繁地使用破折号来编写脚本,特别是服务器端脚本。虽然bash更有表现力,但是dash跑得更快、更安全(这里,Rick-777的评论)
这让你想知道为什么Hostinger.com的root帐户使用bash而不是dash作为标准,就像默认创建的用户帐户一样。超出了我的工资等级。
https://unix.stackexchange.com/questions/555041
复制相似问题