Bash PS1 補滿

今天 Even Wu 在 facebook 上問了一個問題:他的 Bash PS1 要補滿 dash 到換行為止,感覺很有趣,稍微研究了一下。

首先要取得 term 的寬度,這個很容易直接抓 $COLUMNS 就好。

再來要抓原本 PS1 的長度,原本打算用 $PWD 去抓,不過 \w 碰到自己的家目錄會變 ~ 所以長度不對,這邊要自己處理一下:

1
2
3
4
5
6
7
8
9
  if [ "$HOME" == "$PWD" ]
  then
    newPWD="~"
  elif [ "$HOME" ==  "${PWD:0:${#HOME}}" ]
  then
    newPWD="~${PWD:${#HOME}}"
  else
    newPWD=$PWD
  fi

然後塞成跟原本 PS1 一樣的 temp 字串來算長度,最後把 term width 減去 temp 就可以抓到長度了,再作補滿的動作即可。

最後結果如下:

Comments