2016-05-02 40 views
6

(okuma ve eko için) beklendiği gibi çalışmıyor:tee komutu Senaryo ve çıkış aşağıdaki gibidir

Senaryo:

#!/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 

Çıktı: Ben eklemek çalışıyorum

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

günlük dosyasına çıktı. Ama göründüğü gibi, ilk okunmuş gibi görünüyor ve beklendiği gibi yankılamıyor.

Windows 10'da Git Bash Sürüm 3.1.23 kullanıyorum. Bu sürümde adlandırılmış yöneltme bulunmadığından, günlüğe kaydetme amacıyla adlandırılmış yöneltici kullanamıyorum.

+2

'stderr'e üzerindeki istemini görüntüler Oku 'varsa unbuffer komut veya benzer araçları çalıştırmak eğer sizin echo da stderr gitmek olabilir. “Echo” ifadeniz stdout'ta görüntülenir. – bishop

cevap

9

read -p, çıktıyı stderr yazıyor ve echostdout'a yazıyor. stdout, genellikle stderr değilken arabelleğe alınmış ve stdout'dan önce stderr öğelerinin görünmesi nadir değildir.

Sen echo "string" >&2 yaparak ister yoksa bunları kullanılabilir

+0

Anladım. Bu yüzden ben de "echo" yazabilirim *** Bu önce basılmalıdır, şimdi olacak *** "; echo -n "Girdi Girin:"; oku -r; Beklenen sonuç almak için. – ss005

+0

Doğru, çünkü o zaman her şey "stdout" a gidiyor ve akışta hemen sipariş verilecek (ayrıca, o zaman 'stdout', 'tee 'kullanım durumunuzda ne bekliyor olacak) –

+0

Veya, sadece başka bir alternatif 'tee_test 2> & 1 | tee -a logfile' Teşekkürler Renouf :) – ss005