PS1設定を使用したカラーテキストとコマンドのカラー出力が混同されます。

PS1設定を使用したカラーテキストとコマンドのカラー出力が混同されます。

端末内のすべてのテキストに色を付けることを可能にするPS1開始色シーケンス(例:)で終わります(この場合は緑色)。\[\e[0;32m\]ただし、(myのエイリアス)などのコマンドを使用すると、ls出力の色が少し混乱します。最初の「色」の単語は緑色で、それに続く色付けされていないテキストは緑色ではなく白色です。ls --color=auto.bashrc

すべての場合にきれいな出力を得る方法はありますか?出力に色がある場合は、白を「基本」テキスト色として使用できますが、一貫性を維持したいと思います。

もちろん、私が最も望むのは、すべてのコマンドに自動的に適用され、呼び出し方法を変更する必要がないソリューションです。

個人的に私は全く知らない。たぶん、「即時」エスケープシーケンスの出力を取得し、いくつかの置換を実行するために何かを実行できますか?しかし、これを実装する方法がわかりません。特に「舞台裏」で行われるのでさらにそうです。

答え1

その理由は、あなたが間違っているからです。

プロンプトの最後に「オープン」カラーの順序があると言われました。これは間違っています。色巣を建てずに。 「オン」と「オフ」はありません。 「切り替え...」または「デフォルトにリセット」(実際には「0に切り替え」)です。したがって、ls --color=auto操作が完了した後に色が切り替わると、デフォルト値にリセットされるシーケンスが作成されます。これは「以前の方法での復帰」ではありません。

「デフォルト」(パレット番号0など)を希望のテキストカラーを使用するように端末を設定します。その後、プロンプトの色を変えるには、最初に設定して最後にリセットします。

詳細については、Bash Prompt HOWTOをお読みください。第6章ANSIエスケープシーケンス:色とカーソルの移動文書。

答え2

以前に答えたように、PS1オープニングカラーの順序で終わるのは良い考えではありません。これはカラーコマンドの出力を間違えます。端末の前景色(通常のテキスト色)を緑色に設定するには、両方のコンピュータの端末エミュレータ設定(この場合は端末guake設定)で緑色に設定します。これは前景色を緑色に保ち、カラー出力コマンドはこの色を使用してプレーンテキストを表示します。PS1完了を使用する必要があるため、プロンプトをリセットしてください\[\e[0m\]

答え3

以下は、マシンごとに異なる色を適用する方法のヒントです。

case $HOSTNAME in
    host1*) PSC="\e[32m" ;;
    host2*) PSC="\e[33m" ;;
    host3*) PSC="\e[34m" ;;
    host4*) PSC="\e[35m" ;;
    *) PSC="\e[36m" ;;
esac

PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "

残りは直接味わってもいいです。お使いのコンピュータに~/.bashrcのコピーを保存してください。 NFSマウントホームを使用している場合は自動的に実行されます。

関連情報