
我需要能夠做到這一點的原因是要在我的 PS1 中「更新」變數。我希望我的提示跨越終端的整個寬度,而不是環繞或向下到新行。為此,我已經找到了一種讓它工作的方法,但這種方法需要我每次都重新加載 bash。我希望它看起來像這樣:
|me::awesome| --------------------------------------------------------- ~/.config/awesome
$
之後,當我 cd 進入新目錄時,它將如下所示:
|me::themes| -------------------------------------------------------------------------
------ ~/.config/awesome/themes
$
但是當我跑的時候
exec bash
它將成功更改所有值,如下所示:
|me::themes| --------------------------------------------------- ~/.config/awesome/themes
$
因此,我正在尋找一種將不斷變化的變數合併到 PS1 變數中的方法,每次呼叫新提示時我都希望更新該變數。這就是我的 .bashrc 目前的樣子:
mytest=$PWD
mynext="$(basename $PWD)"
mylength=$((${#mytest}+${#mynext}))
length=$(($mylength+6))
PS1='|me::\W| $(printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$'
我還嘗試將變數放入單獨的 shell 腳本文件中,並在我的 PS1 中運行該文件,如下所示:
#/home/me/.PS1.sh
mytest=$PWD
mynext="$(basename $PWD)"
mylength=$((${#mytest}+${#mynext}))
length=$(($mylength+6))
echo "|me::\W| $(printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$"
#/home/me/.bashrc
PS1=$(/home/me/.PS1.sh)
答案1
您的變數僅在第一次進行評估,您必須將它們放入 ps1 中,以便在第一次時按字面意思進行處理,並在命令執行後進行評估。
PS1='|me::\W| $( mytest=$PWD;mynext="${PWD##*/}"; mylength=$((${#mytest}+${#mynext})) ; length=$(($mylength+6)) ; printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$'
如果你為 ps1 新增了內容,則只能更改 6