PS1 改行が含まれると改行が途切れる。

PS1 改行が含まれると改行が途切れる。

私は最近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"'はずですが、この場合は\[ \]

関連情報