ほとんどの場合、コマンドの出力は改行文字で終わります。ただし、そうでない場合もあるため、次のシェルプロンプトが出力と同じ行に出力されます。
例:
root @ hostname [〜]
#echo -n hello helloroot @ hostname [〜]#
私はいつもそれが非常に迷惑だと思っていました。
これで、PS1変数の先頭に「\ n」を追加するだけで済みますが、ほとんどの場合、不要な1行が追加で出力されます。
最後のコマンドの出力が改行で終わったかどうかを知ることは可能ですか?
解決策:
(Dennisに感謝)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
$()
ある場所で使用し、別の場所でバックティックを使用しました。$()
両方でお使いいただけます。
tput cols
とにかくCOLUMNS変数の値を出力するだけなので、私は使用しません。また、組み込みのシェルではないため、処理が遅くなります。また、挿入した空白を削除して\e[K
(と同等tput el
)を含めることもできます。そうすることで、デフォルトの場合にコピーして貼り付けたときに末尾の空白が大量に取得されないようにします。最後に、この魔法をすべての間に含める必要があります。そうしない\[
と\]
、bashがカーソルの位置を2番目に推測しようとし、コマンド/履歴を編集するときに混乱します。
PS1='\[\e[7m%\e[m$( printf "%*s" "$((COLUMNS-1))" "" )\r\e[K\]\u@\h [\w]\$ '