自定义linux shell提示符

时间:2012-02-03 07:13:56

标签: bash prompt

在我的.bashrc中,我得到了这个:

PS1="[\w $]"

每当我cd到一个深层次的目录时,shell提示几乎占据整条线,(终端大小:80 * 24),如:

[/level_a_dir/level_b_dir/level_c_dir/level_d_dir/level_e_dir $]

问题

如果pwd长于20个字符,我想缩短提示,只需保留最后一个目录,如:

[.../level_e_dir $]
#[/level_a_dir/level_b_dir/level_c_dir/level_d_dir] is replaced with ...

怎么做?

2 个答案:

答案 0 :(得分:2)

我是按照以下方式完成的 首先,您必须创建一个shell脚本truncate.sh:

#!/bin/bash
MAXLEN=20
REPLACEMENT="..."

# replace /home/user by ~
TPWD=$(echo ${PWD} | sed 's#'${HOME}'#~#;')

# truncate
if [ ${#TPWD} -gt ${MAXLEN} ] ; then
  PWDOFFSET=$(( ${#TPWD} - ${MAXLEN} ))
  TPWD="${REPLACEMENT}${TPWD:${PWDOFFSET}:${MAXLEN}}"
fi

echo ${TPWD}

接下来你必须更换你的PS1:

export PS1="[\$(truncate.sh) ] "

答案 1 :(得分:0)

如果你真的想要 20个字符(或更少),那么我能想到的最简单的是:

export PS1='[${PWD:$((${#PWD}-20))} $]'

如果你没有足够的空间或考虑有两行提示(我个人讨厌的话,我会放弃括号: - )