Bash

使用目錄樹/文件名時的緊湊 bash 提示

  • June 17, 2018

在具有 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變數來“包裝”和“壓縮”目錄名稱,從不超過一定數量的字元,獲得更短的提示?

首先,您可能只想更改\wwith \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 $ 

引用自:https://unix.stackexchange.com/questions/266256