2010-05-27 60 views
2

我想我的bash提示符設置爲固定寬度,彌補空間的差異$之前,因此無論長或短,我的提示是一樣的寬度:固定寬度的bash提示符

[[email protected]] ~/Directory/Dir...Another/LastDir $ 
[[email protected]] ~/Directory(branch)    $ 

目前,在很短的目錄路徑我的提示符看起來是這樣的:

[[email protected]] ~/Directory(branch) $ 

更深的目錄路徑是這樣的:

[[email protected]] ~/Directory/Dir...Another/LastDir $ 

你可以看到我已經截斷了中間的PWD,所以我可以看到路徑開始的位置以及結束的位置。我想彌補$之前的差異。

這裏是我當前提示:

# keep working directory to 30 chars, center tuncated 
prompt_pwd() { 
    local pwd_symbol="..." 
    local pwd_length=30 
    newPWD="${PWD/#$HOME/~}" 
    [ ${#newPWD} -gt ${pwd_length} ] && newPWD=${newPWD:0:12}${pwd_symbol}${newPWD:${#newPWD}-15} 
} 
# set prompt 
prompt_color() { 
    PROMPT_COMMAND='prompt_pwd;history -a;title_git' 
    PS1="${WHITEONMAGENTA}[\[email protected]\h]${MAGENTA} \w\$(parse_git_branch) ${MAGENTABOLD}\$${PS_CLEAR} " 
    PS1=${PS1//\\w/\$\{newPWD\}} 
    PS2="${WHITEONTEAL}>${PS_CLEAR} " 
} 

在我的搜索,我發現A Prompt the Width of Your Term它確實做了一些補,但不能讓它工作這個特殊的提示。

回答

2

如果您的路徑太短([ ${#newPWD} -le ${pwd_length} ]),您可以使用printf(1)擴展它。

printf -v newPWD "%-*s" $pwd_length "$newPWD" 

這將在$newPWD串用的$pwd_length一個字段寬度左對齊。

printf(1)內置於bash中,因此運行每個提示並不太昂貴。

+0

這工作完美。 – seaofclouds 2010-06-03 03:48:24

0

我所做的是什麼位置我的目錄,例如以上我的提示,所以我不擔心它:

[email protected]:/home/myusername/some/directory 
$ 

這樣,我還可以有額外的好處複製上面的行以獲得SCP和SSH命令,而不必預先指定user @ host:/目錄示例。

這裏是我的$ PS1變量,你想嘗試一下:

\[\e]0;\w\a\]\n\[\e[32m\]\[email protected]\h \[\e[33m\]\w\[\e[0m\]\n\$

+0

我喜歡這個,但爲了真正的複製和粘貼工作,我想要用空格來包裝任何目錄的引號。 – seaofclouds 2010-06-03 03:48:00

+0

@seaofclouds:是的,那是我沒有太多的工作,但我知道你來自哪裏。然而,與手工輸入或用\編輯少量空格相比,我仍然認爲部分解決方案總比沒有好。可能有一種方法可以對此進行註釋,但我對PS1變量還沒有足夠的瞭解。 – 2010-06-03 12:37:31

+0

我正在嘗試使用您的修復程序(Ubuntu 12.04)。要做這個修復,你是否編輯.bashrc有:export PS1 =「\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [ 33m \] \ w \ [\ e [0m \] \ n \ $「?我做了這個編輯,然後再次打開了bash。但是,我的提示並沒有改變。你碰巧知道我做錯了什麼? – Malcolm 2013-03-01 15:36:19

1

您可以設置環境變量BASH_COMMAND,它允許你手動定義提示。你可以使用expand -t來達到所需的長度。