Bash
使用目錄樹/文件名時的緊湊 bash 提示
在具有 Ubuntu 14.04 和 的系統中
bash
,我的PS1
變數以以下內容結尾:\u@\h:\w\$
使提示顯示為
user@machinename:/home/mydirectory$
但是,有時目前目錄有一個長名稱,或者它位於具有長名稱的目錄中,因此提示看起來像
user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$
這將填充終端中的行,游標將轉到另一行,這很煩人。
我想獲得類似的東西
user@machinename:/home/mydirectory1/...another_long_name$
有沒有辦法定義
PS1
變數來“包裝”和“壓縮”目錄名稱,從不超過一定數量的字元,獲得更短的提示?
首先,您可能只想更改
\w
with\W
。這樣,只列印目前目錄的名稱,而不是其整個路徑:terdon@oregano:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name $ PS1="\u@\h:\W \$ " terdon@oregano:my_actual_directory_with_another_long_name $
如果目錄名稱本身太長,這可能還不夠。在這種情況下,您可以
PROMPT_COMMAND
為此使用變數。這是一個特殊的 bash 變數,其值在顯示每個提示之前作為命令執行。因此,如果您將其設置為根據目前目錄路徑的長度設置所需提示的函式,您可以獲得您想要的效果。例如,將這些行添加到您的~/.bashrc
:get_PS1(){ limit=${1:-20} if [[ "${#PWD}" -gt "$limit" ]]; then ## Take the first 5 characters of the path left="${PWD:0:5}" ## ${#PWD} is the length of $PWD. Get the last $limit ## characters of $PWD. right="${PWD:$((${#PWD}-$limit)):${#PWD}}" PS1="\[\033[01;33m\]\u@\h\[\033[01;34m\] ${left}...${right} \$\[\033[00m\] " else PS1="\[\033[01;33m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] " fi } PROMPT_COMMAND=get_PS1
效果如下所示:
terdon@oregano ~ $ cd /home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name terdon@oregano /home...th_another_long_name $