bashrcでこれでbashをカスタマイズしました。
export PS1="\e[0;36m\h\e[m \e[0;33m\w/\e[m \e[0;31m\n\$ →\e[m "
だから私は次のようなものを得ます(色を含む)。
Ahuri ~/Public/
$ →
しかし、長いコマンドには問題があります。 1行より長い非常に長いコマンドを書くと、最初の行が上書きされ始めます。
例:
Ahuri ~/Public/
$ → ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
「^」を引き続き追加すると、次のような結果が得られます。
Ahuri ~/Public/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
私の「$→」を上書きし、行全体を上書きします。
答え1
大丈夫です\n
。これは再び古いエスケープシーケンス長の問題です。\e[0m
同様の内容はプロンプトの実際の長さには含まれていないため、インタプリタに指摘するには\[
..で囲む必要があります。\]
PS1="\[\e[0;36m\]\h\[\e[m\] \[\e[0;33m\]\w/\[\e[m\]\n \[\e[0;31m\]\$ →\[\e[m\] "
答え2
より簡単なオプションは、tput
シーケンスを使用することです。
export PS1='\[$(tput setaf 4)\]\h\[$(tput sgr0)\] \[$(tput setaf 3)\]\w/\[$(tput sgr0)\]\n\[$(tput setaf 1)\]\$ →\[$(tput sgr0)\] '
シェルが印刷可能な出力として計算されないように、コマンド置換()で挿入された端末制御シーケンスを\[
束ねます。ハードワイヤー方式の代わりにコマンド置換を使用すると、より多くの利点が得られます。\]
$(tput … )
正しい端末タイプが何であれ、順序を制御します。
答え3
追加の行を表示して入力する必要が$PROMPT_COMMAND
ないようにするために使用されます。\n
$PS1