Closed4
bashで改行がないとカーソル位置がズレる現象を治す
コマンドの出力の末尾に改行がないと、ターミナルの表示がおかしくなる。
root@kpw-app:~# printf "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
bbbbbbbbbbbbbbbbecho "aaaaaaaaa"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
curlの出力や、nanoエディターでの編集後もこの現象に悩まされる。
出力の最後に改行が入っていればこの現象は起こらない。
root@kpw-app:~# printf "bbbbbbbbbbb\n"
bbbbbbbbbbb
root@kpw-app:~# curl -w "\n" http://localhost:5000
Hello
StackOverflowでトリッキーな解決法を見つけた
PS1='$(printf "%$((tput cols-1))s\r")\u@\h:\w\$ '
とすれば見た目上バグらない。
ただし、コピペすると、printfの出力のあとに大量のスペースが挿入されていることがわかる。
root@kpw-app:~# printf bbbb
bbbb root@kpw-app:~# echo aaaa
aaaa
とりあえずこれを .bashrc に追加して対策することにする。
もっといい解決策あれば知りたい。
解決法を見つけた (大量のスペースが挿入されない方法)
.bashrc の最後に以下のコマンドを追加する。
_set_prompt() {
IFS=';' read -sdR -p $'\E[6n' ROW COL # カーソルの位置を取得
[ $COL -ne 1 ] && echo '' # カーソルが1列目にいなかったら改行を挿入
}
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'_set_prompt'
これで解決。
大量のスペースも挿入されない。めでたしめでたし。
root@kpw-app:~# printf bbbb
bbbb
root@kpw-app:~# echo aaa
aaa
root@kpw-app:~#
このスクラップは4ヶ月前にクローズされました