Ksh
使用長路徑為 Xterm 設置標題
我的 .profile 中有以下程式碼:
case $TERM in xterm*) HOST=`hostname` PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ ' ;; *) PS1='ksh$ ' ;; esac
這很好用,除非路徑太長。是否有另一種方法可以做類似的事情,但是當路徑很長時,它會顯示
.../<end of the path>
以便它工作?
這裡有兩種選擇,具體取決於您的最終目標。
僅顯示尾隨目錄元素
PS1='^[]0;${USER}@${HOST}: ${PWD##*/}^Gksh$ '
這只是將
##
參數替換引入您現有的 PS1,以便貪婪地去除字元,直到最後的正斜杠。無論長度如何,這都會縮短PWD
PS1 提示字元串的部分。只縮短長 PWD 字元串
完全披露,我從這個 Stack Overflow 問題的答案之一中得到了這個“骨頭”:
如何在 KornShell 中自定義顯示提示以顯示主機名和目前目錄?
…然後相應地對其進行了修改。簡而言之,它
cd
是一個內部函式的別名。該函式模擬原始cd
行為,然後執行一些字元串“數學”來確定新的 PS1 提示。我從字面上理解了您的問題,因此,如果您不希望在長目錄名稱前加上“…”,請從該P=...
行中刪除該字元串,並+3
在其上方的數學行中刪除該字元串。function _cd { directory=$1 pattern=$2 # First cd to the directory if [ "$pattern" ] then \cd "$directory" "$pattern" elif [ "$directory" ] then \cd "$directory" else \cd fi # set this value to taste MAXLEN=20 LEN=${#PWD} P=$PWD # if PWD is "too" long, trim it if [ $LEN -gt $MAXLEN ] then # the 3 is for the literal "..." START=$(( LEN - MAXLEN + 3 )) P="..."$(echo $PWD | cut -c ${START}-) fi PS1="^[]0;${USER}@${HOST}: $P^Gksh\$ " } alias cd="_cd"
當然,在我寫這篇文章的時候,我想到了第三種選擇——使用別名/內部函式程式碼,但不是
cut
使用字元串,而是使用其中的##
參數替換來剝離目錄元素,如第一個範例所示。