How to fix 'set -o emacs' in .bashrc not working in ssh shell

I work in an LDAP-based user and host network. My user exists on all hosts since it an LDAP user, and my user's home directory exists on all hosts as a mountpoint.

I have ~/.bash_profile set up to source ~/.bashrc if it exists.

Inside ~/.bashrc my final line is set -o emacs.

On local shells this correctly sets the emacs option to enable emacs-style line editing after login.

But when I ssh to another host, despite my ~/.bashrc loading everything else, the set -o emacs is either not applied or applied then overridden.

Therefore at the moment I have to manually set -o emacs each time I ssh to another host.

Is there a fix for this such that I can ssh to another host and have set -o emacs run automatically so immediately upon entering the interactive shell, emacs line-editing is enabled?

• ssh starts an interactive login shell. bash does not read .bashrc when started as an interactive login shell. – jw013 May 2 '14 at 16:32
• Maybe the error is in the code in ~/.bash_profile testing whether .bashrc exists? What does that code look like? – celtschk May 2 '14 at 16:36
• I can tell there's no error in ~/.bash_profile because my prompt is set correctly in the SSH session and if I e.g. add an 'echo Hi There' line after the set -o emacs in my .bashrc the echo appears after SSH login. – user490123 May 7 '14 at 10:04

Using some strace commands we discovered that /etc/inputrc was being loaded after my ~/.bashrc and that containing a set editing-mode vi call which overrode my set -o emacs. The /etc/inputrc doesn't exist on my local machine hence why the issue didn't occur on localhost.
This strace also identified that ~/.inputrc is sought before /etc/inputrc is loaded as a fallback.
So we did touch ~/.inputrc to create an empty inputrc and voila, set -o emacs now works on SSH login :)
• I had a similar problem where set -o emacs takes no effect at .bashrc. The problem was .inputrc. – geckos Jan 2 '18 at 14:17
ssh starts a brand new shell on the remote host whose standard input and standard output are forwarded by ssh to your local terminal. As such, you need to execute set -o emacs on the remote host, not your local host. Since emacs-style line editing is the default, the remote file presumably already contains a line like set -o vim, which you should remove.