![履歴検索でbashプロンプトに問題が発生するのはなぜですか? [コピー]](https://linux33.com/image/20309/%E5%B1%A5%E6%AD%B4%E6%A4%9C%E7%B4%A2%E3%81%A7bash%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AB%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
多くの場合、コマンド履歴の表示を開始すると、表示されたコマンドの一部の文字は削除されません。たとえば、次のようになります。
何が起こったのか:
prompt$ some_command
prompt$ some_commanother_command
何が起こるべきですか?
prompt$ some_command
prompt$ another_command
この文字は削除できず、bashはコマンドの実行時に無視します。また、新しいプロンプトが表示されると(Enter
たとえば、タップ後)、消えます。
私は私の仕事でLinuxを使用している他の人に尋ね、彼らは時々この問題に直面していますが、解決策がわからないと言いました。
私はUbuntu 11.10を持っており、guakeを使用しています。これは私のものですPS1
:
\e[0;31m\u \A ${PWD##*/}\e[0;32m$(parse_git_branch)\e[0;31m$\e[m
parse_git_branch
どこ
parse_git_branch () {
git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# (\1)#'
}
私が知っている限り、私の同僚はあまり「クール」なPS1を使用してもこの問題を経験しています。
答え1
PS1の長さがゼロの部分の周りに使用されます\[...\]
。これはbashが正しいプロンプト長を得るのに役立ちます。この方法を使用しても、マルチバイト文字を使用するとコマンドラインが壊れる可能性があります(少なくとも私の場合はそうでした)。この場合、タップすることもCtrl+L役立ちます(ただし、同時に画面が消去されます)。
答え2
印刷できない文字をエスケープする必要があります。
いいね
PS1="\[\e[36m\]\W ⇨ \[\e[m\] "
悪い
PS1="\[\e[36m\]\W ⇨ [\e[m\] "