高木のブログ

ZshでPreztoを導入してテーマをredhatにしたら、出力結果の改行無し最終行が表示されなくなった

2021/08/24

問題

タイトル通りで、Zsh使いになってZshフレームワークのPreztoを導入したら出力結果の改行無し最終行が表示されなくなった

自分は文字列を返すAPIをCurlで叩いた時に起きたけど、わかりやすいようにここではechoで例を示す

問題の出力例

[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
[ytkg@TAKAGInoMacBook-Pro ~]$

理想の出力例

[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
World[ytkg@TAKAGInoMacBook-Pro ~]$

原因

プロンプトの設定で、PROMPT_CRがONでPROMPT_SPがOFFになっているからっぽい
その組み合わせだとどうしてダメなのか、そもそもPROMPT_CRとPROMPT_SPは何なのかは割愛する

$ set -o | sed -e 's/^no\(.*\)on$/\1  off/' -e 's/^no\(.*\)off$/\1  on/' |grep -E "prompt(cr|sp)"
promptcr              on
promptsp              off

ちなみにZshのデフォルトは両方ともONらしいけど、redhatの場合、PROMPT_CRのみONにする設定になっていた

解決方法

~/.zshrcにPROMPT_CRをOFFにする設定を追加する

~/.zshrc
unsetopt prompt_cr
$ source ~/.zshrc
$ set -o | sed -e 's/^no\(.*\)on$/\1  off/' -e 's/^no\(.*\)off$/\1  on/' |grep -E "prompt(cr|sp)"
promptcr              off
promptsp              off
[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
World[ytkg@TAKAGInoMacBook-Pro ~]$

理想の出力になった

補足

パイプやリダイレクトでも起きる

この現象は表示だけではなく、パイプやリダイレクトでも起きることを確認した

$ echo -n "Hello\nWorld" | cat
Hello
$ echo -n "Hello\nWorld" > output.txt
$ cat output.txt
Hello

PROMPT_SPをONにするパターンでは解決せず

PROMPT_SPをONにする解決方法の記事もいくつか見つかったが、自分の環境ではダメだった

~/.zshrc
setopt prompt_sp
$ set -o | sed -e 's/^no\(.*\)on$/\1  off/' -e 's/^no\(.*\)off$/\1  on/' |grep -E "prompt(cr|sp)"
promptcr              on
promptsp              on
[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
World%
[ytkg@TAKAGInoMacBook-Pro ~]$

最終行末尾に%が表示されているし、改行もされている

参考


Written by ytkg, Twitter, GitHub

Pixela