loading...

Fixing Wrong Prompt String on a EC2 Linux Instance

wingkwong profile image Wing-Kam ・2 min read

One of my colleagues reported that he could not run a npm command on a EC2 instance (Amazon Linux AMI 2018.03). When I connected to the EC2 instance via SSH and found that the prompt string was using the default one which is \s-\v\$. It shows the basename of the shell process with the version.

The ~/.bashrc file looks normal. ~/.bashrc should execute /etc/bashrc where PROMPT_COMMAND will be set based on the environment variable TERM after login.

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

As I am using Mac OSX Terminal, my TERM is xterm-256color, which matches the first case. /etc/sysconfig/bash-prompt-xterm does not exist, hence my PROMPT_COMMAND would be printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*)
        if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
        else
            PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
        fi
        ;;
    screen)
        if [ -e /etc/sysconfig/bash-prompt-screen ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
        else
            PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
        fi
        ;;
    *)
        [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
        ;;
      esac
  fi

When an interactive shell is invoked, it executes commands from /etc/profile, ~/.bash_profile, ~/.bash_login, and ~/.profile. The last three files does not exist.

~/.bashrc is executed when the interactive shell is not a login shell. Hence, I added the following lines to ~/.profile as it is executed by the command interpreter for login shell.

if [ -n "$BASH_VERSION" ]; then
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Restart the shell and test. It is back to normal now and $PS1 is back to [\u@\h \W]\$

[ec2-user@ip-xxx-xx-xx-xxx ~]$

Posted on by:

wingkwong profile

Wing-Kam

@wingkwong

Consultant by day. Developer by night. AWS certified. Exploring #CloudNative currently.

Discussion

markdown guide