当我通过设置突然在 bash 中打开 vi 模式时,set -o vi
制表符补全被破坏,并插入了文字制表符。如何解决这个问题?
答案1
长话短说~/.profile
通过创建来解决
if [ $0 != -bash ]; then
exec -l bash
fi
长版:
经过一段时间的搜索后,我发现在 DSM6 上,bash 在 posix 模式下运行(使用 验证set -o
),并且制表符补全在 posix 模式下的 vi 模式下不起作用(Posix 模式下的 bash 补全)。我通过添加bind TAB:complete
到 my 中尝试了建议的解决方案~/.bashrc
,但这不起作用。我还尝试关闭 posix 模式set +o posix
,这有效,但仅在命令行上,而不是在~/.bashrc
.
所以我尝试弄清楚为什么 bash 默认情况下会以 posix 模式启动。我发现我的登录 shell 被设置为/bin/sh
(您可以在 中找到/etc/passwd
),它符号链接到/bin/bash
(用 验证ls -l /bin/sh
)。在里面bash 手册页它说
如果巴什使用名称调用嘘,它试图模仿历史版本的启动行为嘘尽可能接近,同时也符合 POSIX 标准。
所以看来解决方案是将登录 shell 更改为/bin/bash
.执行此操作后,我无法再通过 ssh 连接到我的 Synology,原因:Permission denied, please try again.
原因是什么?显然,ash
Synology 不允许除或之外的任何其他登录 shell sh
,他们将其修补并编译到 OpenSSH 二进制文件中(为什么&*#$%他们认为这是一个聪明的主意?!)
那么该怎么办?建议的解决方案是通过创建来启动一个新bash
会话~/.profile
if [ $0 != -bash ]; then
exec -l bash
fi
现在正在按预期工作set -o vi
。~/.bashrc
唯一的问题是,中的默认配置文件/etc/profile
不再被读取,因此您必须自己在 中设置一个好的提示(PS1)~/.bashrc
。您可以复制标准的 ubuntu ~/.bashrc
,也可以查看/etc.defaults/.bash_profile
.