実際には、これは「印刷されない文字」区切り文字の欠落に関係していると思います。私はまったく同じ問題を抱えていましたが、改行(\ n)の前に移動しても修正されませんでした。代わりに、すべての非印刷文字(ここでは色付けコマンド)を '\ ['および '\]'で正しく囲みました。
悪い(動作しますが、上記の履歴マッシングの問題があります):
PS1="\e[32m\u\e[35m@\e[32m\h \e[33m\w\e[36m\n\$\e[0m"
良い(すべてのカラーコマンドを '\ ['および '\]'で囲む-マッシュコマンド履歴を表示しない):
PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"
i.e. "\e[...m" --becomes--> "\[\e[...m\]"
これをSecureCRTのようなものに入れてシステムへのログイン時に自動送信する場合、自動ログインシステムが送信する文字を決定するために最初のバックスラッシュ自体を消費する場合、すべてを二重エスケープする必要があります(どこでも二重バックスラッシュを置く) :
PS1="\\[\\e[32m\\]\\u\\[\\e[35m\\]@\\[\\e[32m\\]\\h \\[\\e[33m\\]\\w\\[\\e[36m\\]\\n\\$\\[\\e[0m\\]"
i.e. "\..." --becomes--> "\\..."
(これはSecureCRTには間違いなく当てはまり、PuTTYやTeraTermなど、他の人にも当てはまる可能性があります-テストはお客様の側で必要です。)