私がこれを行うことができる理由は、私の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\$'
また、変数を別のシェルスクリプトファイルに入れ、次のように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つだけ変更できます。