2015-08-26 23 views
1

仅当当前目录发生更改时,我才想对bash shell提示符(= PS1)加下划线。 我试过了。仅当pwd发生改变时才强调bash提示

.bashrc文件我写

DIR_CHANGED= 
function cd { 
    builtin cd "[email protected]" 
    DIR_CHANGED=1 
} 

function dir_ul { 
    # if $DIR_CHANGED is 1, draw underline 
    if [ x == x$DIR_CHANGED ]; then echo -en '\033[0;34m'; else echo -en '\033[4;34m'; fi 
    export DIR_CHANGED='' 
} 

export PS1='$(dir_ul)\w$(tput sgr0)$ ' 

但没有奏效。

我该如何解决?

+0

这可能有助于:[如何调试bash脚本?](http://unix.stackexchange.com/q/155551/74329) – Cyrus

回答

1

我讨厌这么说,但我会称之为bash的bug。这是一个解决方法:使用PROMPT_COMMAND到 复制$ DIR_CHANGED并重置它,并在dir_ul中引用该保存的副本。最小变化:

function dir_ul { 
    if [ x == x$DIR2 ]; then echo -en '\033[0;34m'; else echo -en '\033[4;34m'; fi 
} 
PROMPT_COMMAND='DIR2=$DIR_CHANGED;DIR_CHANGED=' 
1

与第二壳测试这在你的〜/ .bashrc:

PREV="$PWD" 
PROMPT_COMMAND='[[ $PREV != $PWD ]] && PS1="$(tput smul)\w$(tput rmul)$ " && PREV="$PWD" || PS1="$(tput rmul)\w$ "' 
0

$(dir_ul)得到的实例计算您设置PS1变量,而不是被不断更新。

相关问题