How to remove the return code from the terminal prompt in Sugar on a Stick?

5,942

In addition to the PS1 environment variable, the PROMPT_COMMAND environment variable also affects your prompt. From the bash man page:

If set, the value is executed as a command prior to issuing each primary prompt

It is that command that is adding the unwanted content to your prompt. You can stop that behavior by unsetting the variable in your .bashrc:

unset PROMPT_COMMAND
Share:
5,942

Related videos on Youtube

Mateusz Piotrowski
Author by

Mateusz Piotrowski

Updated on September 18, 2022

Comments

  • Mateusz Piotrowski
    Mateusz Piotrowski almost 2 years

    I am using Sugar on a Stick (Fedora 23) 0.106 for i686 as a distro.

    When I use the terminal I get a very weird behaviour.

    weird codes

    For example when I type ls I get ]777;notify;Command completed;ls[sugar] # where [sugar] # is the value of my PS1 environmental variable.

    My .bashrc look like this:

    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
        . /etc/bashrc
    fi
    
    # Prompt
    PS1="[sugar] # "
    
    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=
    
    # User specific aliases and functions
    

    The problem is gone when I comment out the Source global definitions section. However when I wanted to modify the /etc/bashrc I read that it is not wise to modify this file. Here's the file:

    # /etc/bashrc
    
    # System wide functions and aliases
    # Environment stuff goes in /etc/profile
    
    # It's NOT a good idea to change this file unless you know what you
    # are doing. It's much better to create a custom.sh shell script in
    # /etc/profile.d/ to make custom changes to your environment, as this
    # will prevent the need for merging in future updates.
    
    # are we an interactive shell?
    if [ "$PS1" ]; then
      if [ -z "$PROMPT_COMMAND" ]; then
        case $TERM in
        xterm*|vte*)
          if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
              PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
          elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
              PROMPT_COMMAND="__vte_prompt_command"
          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 "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
          fi
          ;;
        *)
          [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
          ;;
        esac
      fi
      # Turn on parallel history
      shopt -s histappend
      history -a
      # Turn on checkwinsize
      shopt -s checkwinsize
      [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
      # You might want to have e.g. tty in prompt (e.g. more virtual machines)
      # and console windows
      # If you want to do so, just add e.g.
      # if [ "$PS1" ]; then
      #   PS1="[\u@\h:\l \W]\\$ "
      # fi
      # to your custom modification shell script in /etc/profile.d/ directory
    fi
    
    if ! shopt -q login_shell ; then # We're not a login shell
        # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
        pathmunge () {
            case ":${PATH}:" in
                *:"$1":*)
                    ;;
                *)
                    if [ "$2" = "after" ] ; then
                        PATH=$PATH:$1
                    else
                        PATH=$1:$PATH
                    fi
            esac
        }
    
        # By default, we want umask to get set. This sets it for non-login shell.
        # Current threshold for system reserved uid/gids is 200
        # You could check uidgid reservation validity in
        # /usr/share/doc/setup-*/uidgid file
        if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
           umask 002
        else
           umask 022
        fi
    
        SHELL=/bin/bash
        # Only display echos from profile.d scripts if we are no login shell
        # and interactive - otherwise just process them to set envvars
        for i in /etc/profile.d/*.sh; do
            if [ -r "$i" ]; then
                if [ "$PS1" ]; then
                    . "$i"
                else
                    . "$i" >/dev/null
                fi
            fi
        done
    
        unset i
        unset -f pathmunge
    fi
    # vim:ts=4:sw=4
    

    What can I do about it?

  • Mateusz Piotrowski
    Mateusz Piotrowski over 8 years
    Thank you. Adding unset PROMPT_COMMAND after the #Source global definitions section solved the problem.
  • DEAR ANGEL
    DEAR ANGEL over 6 years
    Yes, it works, but I fail to understand why. I have two nearly identical systems, and switching to root (using the 'su' command) triggers that decoration (']777;notify;Command completed;...') on one but it does not on another. I'd like to understand what differs.