Ger*_*ger 8 bash autocomplete vi-mode synology
当我通过set -o vi突然设置在 bash 中打开 vi 模式时,选项卡完成被破坏,并插入了一个文字选项卡。如何解决这个问题?
Ger*_*ger 10
TL; DR解决通过创建~/.profile与
if [ -x /bin/bash ]; then
exec /bin/bash
fi
Run Code Online (Sandbox Code Playgroud)
长版:
搜索了一段时间后,我发现在 DSM6 上 bash 以 posix 模式运行(使用 验证set -o),而 Tab补全在 posix 模式下的vi 模式下不起作用(Posix 模式下的 bash 补全)。我通过添加bind TAB:complete到我的尝试了建议的解决方案,~/.bashrc但没有奏效。我还尝试关闭 posix 模式,set +o posix这有效,但仅在命令行上,而不是在~/.bashrc.
所以我试图弄清楚为什么 bash 会默认以 posix 模式启动。我发现我的登录 shell 被设置为/bin/sh(你可以在 中找到/etc/passwd),它被符号链接到/bin/bash(用 验证ls -l /bin/sh)。在bash 手册页中,它说
如果使用名称sh调用bash,它会尝试尽可能模仿sh历史版本的启动行为,同时也符合 POSIX 标准。
所以看起来的解决方案是将登录外壳更改为/bin/bash. 执行此操作后,我无法再通过 ssh 连接到 Synology,原因:Permission denied, please try again.
原因?显然,Synology 不允许使用除ashor之外的任何其他登录 shell ,sh并且他们将其修补并编译到 OpenSSH 二进制文件中(为什么他们认为 &*#$% 认为这是一个聪明的主意?!)
那么该怎么办?建议的解决方案是bash通过创建~/.profile与
if [ -x /bin/bash ]; then
exec /bin/bash
fi
Run Code Online (Sandbox Code Playgroud)
现在设置set -o vi在~/.bashrc按预期工作。唯一的问题是/etc/profile不再读取中的默认配置文件,因此您必须自己在~/.bashrc. 您可以复制标准的 ubuntu ~/.bashrc,也可以查看/etc.defaults/.bash_profile.
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |