echo Impossible|sed 's/Im/To be /'

May 09, 2008

[tip] Bash 提示符號如何伸縮自如?

在 IRC 上有朋友在問,有時因為路徑太長,容易讓過長的 command 需要換行而造成不便。 所以想找找看,有什麼方法 可以將 『Bash 提示符號』動態變長變短,像是 vi editor 一樣,用個指令就可以 將『提示訊息』縮短及伸長。

這個想法很有趣,不過因為我不是 vi user, 所以我不知道 vi 的這個行為是怎樣的動作, 但我倒是見過不少人的 PS1 會刻意換行,以取得上述想法的平衡點。

       『既想知道完整路徑,又想取得最長 command 空間』

lloyd@debian:/usr/src/linux-source-2.6.24/drivers
$ echo \"$PS1\"
"\u@\h:\w\n$ "
lloyd@debian:/usr/src/linux-source-2.6.24/drivers
$

但我越想越覺得這是個有趣及有益身心健康的點子,似乎可以利用一個命令來動態縮短以及伸長『提示符號』, 於是就有了下面的小技巧。可以將 PS1.sh 的內容放在 ~/.bashrc 內,每次登入就可以使用會更加方便。

$> cat PS1.sh
PS1 ()
{
    if [ "$PS1" == '\u@\h \W $ ' ]; then
        PS1='\u@\h \w $ ';
    else
        PS1='\u@\h \W $ ';
    fi
}
$> source PS1.sh
$> PS1
lloyd@debian:/usr/src/linux-source-2.6.24/drivers $ PS1
lloyd@debian:drivers $ PS1
lloyd@debian:/usr/src/linux-source-2.6.24/drivers $ PS1
lloyd@debian:drivers $