首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VPS上自动完成的问题

VPS上自动完成的问题
EN

Unix & Linux用户
提问于 2019-12-01 12:01:35
回答 1查看 323关注 0票数 1

我刚用hostinger.com设置了一个VPS。操作系统是Ubuntu18.04。我创建了一个用户帐户迈克。我很快意识到,自动完成显然没有安装,所以看看你如何做到这一点。出于某种原因(壳的类型?)我必须用一个点来来源,而不是用source这个词。

当mike登录时,我这样做了:

代码语言:javascript
复制
sudo apt-get install bash-completion

(注:为了解决这个问题,我后来尝试了sudo apt-get install --reinstall bash-completion)

..。我在/home/mike/..bashrc中添加了这一行:

代码语言:javascript
复制
. /etc/bash_completion

实际上,该文件由一行组成:

代码语言:javascript
复制
. /usr/share/bash-completion/bash_completion

当前的情况是,通过这样做,我可以在以root身份登录时自动完成工作:

代码语言:javascript
复制
$ . /home/mike/.bashrc

但是,当像mike一样登录时,相同的命令会给出:

代码语言:javascript
复制
$ . /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生成(几个)错误时,请进行资源搜索:

代码语言:javascript
复制
$ . /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语法?我该如何检查这类事情呢?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-12-03 18:05:12

(以root身份登录:)

代码语言:javascript
复制
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

..。经过一番搜索,我们找到了答案:

代码语言:javascript
复制
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作为标准,就像默认创建的用户帐户一样。超出了我的工资等级。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/555041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档