How can I shortern my command line prompt's current directory?

前端 未结 10 1943
野趣味
野趣味 2020-11-29 17:08

I am using Ubuntu and I am tired of this long prompts in bash when I am working with some deep directory hierarchy. So, I would like to tweak my PS1 to shorten the working d

10条回答
  •  误落风尘
    2020-11-29 17:38

    This is what I use based on the solutions from anubhava. It sets both the prompt and the windows title. The awk script is more readable so it can be tweaked/customized easily.

    It will fold the path if it's more than 16 chars and 4 levels deep. Furthermore, it will also indicate in the ... how many directories were folded, so you get a sense of how deep the path is, ie: ~/usr/..4../path2/path1 indicates 4 levels were folded.

    # define the awk script using heredoc notation for easy modification
    MYPSDIR_AWK=$(cat << 'EOF'
    BEGIN { FS = OFS = "/" }
    { 
       sub(ENVIRON["HOME"], "~");
       if (length($0) > 16 && NF > 4)
          print $1,$2,".." NF-4 "..",$(NF-1),$NF
       else
          print $0
    }
    EOF
    )
    
    # my replacement for \w prompt expansion
    export MYPSDIR='$(echo -n "$PWD" | awk "$MYPSDIR_AWK")'
    
    # the fancy colorized prompt: [0 user@host ~]$
    # return code is in green, user@host is in bold/white
    export PS1='[\[\033[1;32m\]$?\[\033[0;0m\] \[\033[0;1m\]\u@\h\[\033[0;0m\] $(eval "echo ${MYPSDIR}")]$ '
    
    # set x/ssh window title as well
    export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*} $(eval "echo ${MYPSDIR}")\007"'
    

    Here's what it looks like in action. The green 0 is the return code of last command:

提交回复
热议问题