2016-05-02 10 views
6

(読み取りとし、エコー)期待通りに動作していない:teeコマンドは、スクリプトの出力は以下の通りです

スクリプト:

#!/bin/bash 
#tee_with_read.sh 
function tee_test() 
{ 
    echo "***This should be printed first but it is not***" 
    read -r -p "Enter input : " 
    echo "You entered : $REPLY" 
} 
tee_test | tee -a logfile 

出力:私が追加しようとしている

$ ./tee_with_read.sh 
Enter input : ***This should be printed first, but it is not*** 
"My Input" 
You entered : "My Input" 

ログファイルに出力します。 しかし、あなたが出力で見ることができるように、それは最初の読み込みがexcutedされ、次に期待どおりにエコーされないようです。

Windows 10でGit Bashバージョン3.1.23を使用しています。 名前付きパイプはこのバージョンでは使用できないため、名前付きパイプをログ用に使用できません。

+2

'標準エラー出力にそのプロンプトを表示read'持っている場合は、unbufferコマンドまたは同様のツールでそれを実行することができれば、あなたのechostderrに行く可能性があります。あなたの 'echo'がstdoutに表示されます。 – bishop

答えて

9

read -pstderrに出力し、echostdoutに書き込みます。 stdoutは通常、ではないのでバッファされます。stderrが表示されるのは珍しくありません。stdoutより前です。

あなたがecho "string" >&2を行うことにより、好きか、あなたがそれらを利用できる

+0

私はそれを得た。ですから、私は 'echo 'と書くこともできます***これは最初に印刷されるべきです、今度は***";エコー-n "入力を入力:";読み取り-r; '期待される結果を得るために。 – ss005

+0

そう、すべてが 'stdout'に行き、ストリーム上で直ちに注文されるからです(また' stdout'にあります。これはあなたのユースケースで 'tee'が期待しているものです) –

+0

あるいは、 'tee_test 2>&1 | tee -a logfile'ありがとうRenouf :) – ss005

関連する問題