私は最近Linuxを使い始めて(デフォルト名だけではなく)作業ディレクトリを見ることができれば役に立つと思い、ファイルを次のよう~/.bashrc
に変更しました。
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
LGREEN="\[$(tput setaf 10)\]"
DGREEN="\[$(tput setaf 28)\]"
GREEN="\[$(tput setaf 2)\]"
RESET="\[$(tput setaf 255)\]"
TEAL="\[$(tput setaf 123)\]"
PS1="${RESET}/${LGREEN}\u@${GREEN}\t${DGREEN} \w ${RESET}\n\\ \[\[\033[5m\]${TEAL}>>\[\033[0m\]\]"
考えることができるすべてを試しました。エスケープ文字をラップし、\[\]
にカラー変数を再ラップしましたが、\[\]
何も機能しません。同じことが起こります。 1行に入らないほど長すぎるコマンドを入力すると、代わりに適切にラップされ、次の行に続くとそれ自体が重なって壊れているように見えます。
答え1
\n
私はエスケープがプロンプトエスケープの1つとして明示的にリストされているので、そこで改行が機能する必要があると思います。シェルも解釈しやすく、次の行にジャンプするときにプロンプトの長さをゼロにリセットするだけです。
私がテストしたところ、2倍になり、最終的に問題を引き起こすことがわかり\[\[
ました\]\]
。
これには、最後のセクション全体に1つのグループがあり、\[ \]
その中に同じコンテンツで構成される2つのグループがあります。
\[\[\033[5m\]${TEAL}>>\[\033[0m\]\]
^^^^^^^^^^^ ^^^^^^^^^^^
おそらく外側を削除する必要があります。
\[\033[5m\]${TEAL}>>\[\033[0m\]
設定時に二重引用符を使用するので、カラーコードは問題ありませんPS1
。したがって、カラー変数は割り当て時に拡張され、\[ \]
エスケープが機能します。
2行のプロンプトが実際に機能しない場合は、いつでも最初の行を印刷できますPROMPT_COMMAND
。
これはうまくいくPROMPT_COMMAND='printf "${RESET}/${LGREEN}$USER@${GREEN}$(date +%T)${DGREEN} $PWD ${RESET}\n"'
はずですが、この場合は\[ \]
。