如何修复 .bashrc 中的“set -o emacs”在 ssh shell 中不起作用

如何修复 .bashrc 中的“set -o emacs”在 ssh shell 中不起作用

我在基于 LDAP 的用户和主机网络中工作。我的用户存在于所有主机上,因为它是 LDAP 用户,并且我的用户的主目录作为安装点存在于所有主机上。

我已经~/.bash_profile设置了来源(~/.bashrc如果存在)。

~/.bashrc我的最后一行里面是set -o emacs.

在本地 shell 上,这可以正确设置 emacs 选项,以在登录后启用 emacs 样式的行编辑。

但是,当我 ssh 到另一台主机时,尽管我~/.bashrc加载了其他所有内容,但它set -o emacs要么不应用,要么应用然后被覆盖。

因此,目前我set -o emacs每次 ssh 到另一台主机时都必须手动操作。

是否有解决此问题的方法,以便我可以 ssh 到另一台主机并set -o emacs在进入交互式 shell 后立即自动运行,启用 emacs 行编辑?

答案1

使用一些strace命令,我​​们发现它/etc/inputrc是在 my 之后加载的~/.bashrc,并且包含set editing-mode vi覆盖 my 的调用set -o emacs。我的本地计算机上不存在该问题/etc/inputrc,因此问题没有发生在本地主机上。

该 strace 还确定了在加载~/.inputrc之前查找的内容/etc/inputrc作为后备。

所以我们touch ~/.inputrc创建了一个空的inputrc,瞧,set -o emacs现在可以使用 SSH 登录了:)

答案2

ssh在远程主机上启动一个全新的 shell,其标准输入和标准输出将转发ssh到本地终端。因此,您需要set -o emacs执行偏僻的主机,而不是您的本地主机。由于emacs-style 行编辑是默认设置,因此远程文件可能已经包含类似 的行set -o vim,您应该将其删除。

相关内容