LoginSignup
1
1

More than 5 years have passed since last update.

fishは一文字の改行なし出力をプロンプトで消してしまう

Last updated at Posted at 2017-05-12

少しプロンプトという用語の使い方が怪しいです。

概要

原因不明。

ターミナルで出力があったとき、新しいプロンプトは出力の最後から連続して始まる。

# 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が出力されていることが確認できた。スクリプトが終了すると、プロンプトで上書きされるようだ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1