少しプロンプトという用語の使い方が怪しいです。
概要
原因不明。
ターミナルで出力があったとき、新しいプロンプトは出力の最後から連続して始まる。
# echo -n abc
abc#
(# がプロンプト)
ところが、fishの場合、2文字以上の出力の場合は上記のようになるが、1文字の場合、カーソルが動いてないのか、上書きしてしまう。
# echo -n a
#
(↑aの出力がなくなる)
テストコードなどで最後に結果を一文字、01やtfで出力するときなどに引っかかるかも。
検証環境
CentOS7
# bash -version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
# fish -v
fish, version 2.5.0
# python -V
Python 2.7.5
# php -v
PHP 5.4.16 (cli) (built: Nov 6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v6.0.9, Copyright (c) 2002-2016, by ionCube Ltd.
with uopz v2.0.7, Copyright (c) 2014, by Joe Watkins <krakjoe@php.net>
with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies
with strict v0.4.1, Copyright (c) 2014, by Joe Watkins <krakjoe@php.net>
with Suhosin v0.9.38, Copyright (c) 2007-2015, by SektionEins GmbH
コード
実行結果に関しては概要で記したことと同じなので省略。
Shell script
vanish.sh
# -nオプションで末尾改行を消して出力
echo -n a
PHP
vanish.php
<?php
echo 'a';
Python
vanish.py
import sys
# pythonのprintはデフォルト改行。
sys.stdout.write('a')
出力はしている
何度か動かしていると違和感があったので、
<?php
echo 'a';
sleep(1);
と出力からスクリプト終了まで時間を置いてみると、ちゃんとaが出力されていることが確認できた。スクリプトが終了すると、プロンプトで上書きされるようだ。