如何在 Synology DSM6 上以 vi 模式启用 bash 补全

如何在 Synology DSM6 上以 vi 模式启用 bash 补全

当我通过设置突然在 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. 原因是什么?显然,ashSynology 不允许除或之外的任何其他登录 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.

相关内容