これは私のためのbash-prompt-fiddling-timeです。背景色がBashプロンプトで行末まで伸びています
私は2ラインプロンプトを取得しようとしている:
-
行の最後に位置情報、および背景色で
- 第一ライン 時間と前のコマンドの終了コードで
- 2行目
私はほとんどそこにいますが、私は "行の終わりまでの背景色"の部分を解読することはできません。まあまあ。
いくつかの情報源からの情報をまとめて、最も重要なのはhereとhereですから、私はthis result (terminal screenshot)になります。それが第一ライン
- :あなたが見ることができるように
は、何かがCOLUMNSの計算で間違っていますターミナルの底に達する。それはラインの終わりに達します。間違った行...
- 別の奇妙なもの:2番目のプロンプト行をブラケットしている小さな[]。そしてそれらはONLY A COMMANDが
を入力した後これは私のbashrcにコードで表示されます。
PROMPT_COMMAND=__prompt_command
__prompt_command()
{
local EXIT="$?"
local Red='\[\033[1;38;5;9m\]'
local Green='\[\033[1;38;5;10m\]'
local Gray='\[\033[0;38;5;248m\]'
local BgBlue='\[\033[48;5;253;1;38;5;12m\]'
local BgPurple='\[\033[48;5;253;1;38;5;93m\]'
local None='\[\e[0m\]'
PS1="${BgPurple}\[email protected]\h:${BgBlue}\$PWD"
printf -v TC_SPC "%${COLUMNS}s" ''
COLUMNS=$(tput cols)
PS1=`echo $PS1 | sed "s/$/$TC_SPC/; s/^\\(.\\{${COLUMNS}\\}\\) */\\1/"`
PS1+="\n${Gray}\D{%F %T}"
if [ $EXIT != 0 ]; then
PS1+=" ${Red} O_o ${None}" # Add red if exit code non 0
else
PS1+="${Green} ^_^ ${None}"
fi
}
私はより多くのハッキングを試みたが、何もない成功。
ああ、そこに私も試したのsedビット、他のより洗練されたバージョン:
PS1=`echo $PS1 | sed "s/$/$TC_SPC/; s/^\\(\\(\\o33\\[[0-9;]*[a-zA-Z]\\)*\\)\\([^\o033]\\{${COLUMNS}\\}\\) */\\1\\3/"`
Different result (terminal screenshot)まだありませんOK。
この時点で私は助けを借りています!
ありがとうエリックは、完璧でとてもシンプルな...私は両方の行の後にこれを追加しなければならなかった、2番目は、端末の底に達するときに問題を解決するために必要でした。好奇心の外にあなたの提案に意図された「$」は何ですか?私はそれを試してみましたが、それを達成したようです。 – Peyo61
bashでは、 '$ 'STRING''は一重引用符で囲まれた文字列に似ていますが、バックスラッシュでエスケープされたシーケンスに特別な意味を与えます。この場合、 '\ nnn'は"値が8進数のnnn(1〜3桁)の8ビット文字 "に置き換えられます。オクタル033はエスケープ文字です。'man bash'を見て、完全なリストについて' $ 'を探してください。 – Eric