Controlling the Size and Appearance of $PWD

Bash Prompt HOWTO:
Prev | Chapter 11. Prompt Code Snippets | Next

# 11.10. Controlling the Size and Appearance of $PWD

Unix allows long file names, which can lead to the value of $PWD being very long. Some people (notably the default RedHat prompt) choose to use the basename of the current working directory (ie. "giles" if $PWD="/home/giles"). I like more info than that, but it's often desirable to limit the length of the directory name, and it makes the most sense to truncate on the left.

    #   How many characters of the $PWD should be kept
    local pwdmaxlen=30
    #   Indicator that there has been directory truncation:
    #trunc_symbol="<"
    local trunc_symbol="..."
    if [ ${#PWD} -gt $pwdmaxlen ]
    then
    	local pwdoffset=$(( ${#PWD} - $pwdmaxlen ))
    	newPWD="${trunc_symbol}${PWD:$pwdoffset:$pwdmaxlen}"
    else
    	newPWD=${PWD}
    fi

The above code can be executed as part of PROMPT_COMMAND, and the environment variable generated (`newPWD`) can then be included in the prompt. Thanks to Alexander Mikhailian `<mikhailian at altern dot org>` who rewrote the code to utilize new Bash functionality, thus speeding it up considerably.

Risto Juola (risto AT risto.net) wrote to say that he preferred to have the "~" in the `$newPWD`, so he wrote another version:

    pwd_length=20

    DIR=`pwd`

    echo $DIR | grep "^$HOME" >> /dev/null

    if [ $? -eq 0 ]
    then
      CURRDIR=`echo $DIR | awk -F$HOME '{print $2}'`
      newPWD="~$CURRDIR"

      if [ $(echo -n $newPWD | wc -c | tr -d " ") -gt $pwd_length ]
      then
        newPWD="~/..$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")"
      fi
    elif [ "$DIR" = "$HOME" ]
    then
      newPWD="~"
    elif [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ]
    then
      newPWD="..$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")"
    else
      newPWD="$(echo -n $PWD)"
    fi

Relative speed: the first version takes about 0.45 seconds on an unloaded 486SX25. Risto's version takes about 0.80 to 0.95 seconds. The variation in this case is due to whether or not truncation is required.

Prev | Home | Next
Number of Processes | Up | Laptop Power