Fix bind warning in .profile on login in Ubuntu

post, Sep 8, 2020, on Mitja Felicijan's blog

Recently I moved back to bash as my default shell. I was previously using fish and got used to the cool features it has. But, regardless of that, I wanted to move to a more standard shell because I was hopping back and forth with exporting variables and stuff like that which got pretty annoying.

So I embarked on a mission to make bash more like fish and in the process found that I really missed autosuggest with TAB on changing directories.

I found a nice alternative that emulates zsh like autosuggestion and autocomplete so I added the following to my .bashrc file.

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"
bind '"\e[Z":menu-complete-backward'

I haven't noticed anything wrong with this and all was working fine until I restarted my machine and then I got this error.

Profile bind error

When I pressed OK, I got into the Gnome shell and all was working fine, but the error was still bugging me. I started looking for the reason why this is happening and found a solution to this error on Remote SSH Commands - bash bind warning: line editing not enabled.

So I added a simple if [ -t 1 ] around bind statements to avoid running commands that presume the session is interactive when it isn't.

if [ -t 1 ]; then
  bind "TAB:menu-complete"
  bind "set show-all-if-ambiguous on"
  bind "set completion-ignore-case on"
  bind "set menu-complete-display-prefix on"
  bind '"\e[Z":menu-complete-backward'
fi

After logging out and back in the problem was gone.

Other posts

DateTitle
Converting Valgrind callgrinds to SVG format
The strange case of Elasticsearch allocation failure
Simple world clock with eInk display and Raspberry Pi Zero
Using Digitalocean Spaces to sync between computers
What I've learned developing ad server
Using sentiment analysis for clickbait detection in RSS feeds
Microsoundtrack — That sound that machine makes when struggling
Getting started with MicroPython and ESP8266
Create placeholder images with sharp Node.js image processing library