2016-05-02 5 views
6

Script und Ausgang ist als unten:-T-Befehl nicht wie erwartet funktioniert (mit Lese- und Echo)

Script:

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

Ausgang:

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

Ich versuche zu anhängen Ausgabe in die Logdatei. Aber wie Sie in output sehen können, scheint es, als ob erster Lesevorgang ausgeführt wird und dann Echo, das nicht wie erwartet ist.

Ich benutze Git Bash Version 3.1.23 auf Windows 10. Da named Pipe in dieser Version nicht verfügbar ist, kann ich Named Pipe für Protokollzwecke nicht verwenden.

+2

'read' auf stderr seine Aufforderung anzeigt. Ihr 'Echo' wird auf der Standardausgabe angezeigt. – bishop

Antwort

9

read -p schreibt es ist Ausgabe stderr und echo schreibt an stdout. stdout ist in der Regel gepuffert, während stderr ist nicht, und so ist es nicht ungewöhnlich zu sehen, stderr Dinge zeigen sich vor stdout.

könnten Sie haben Ihre echo auch stderr gehen, wenn Sie von echo "string" >&2 tun mögen, oder Sie könnte es in den unbuffer Befehl oder ähnliche Werkzeuge laufen, wenn man sie

zur Verfügung haben
+0

Ich habe es. Also könnte ich auch "echo" schreiben *** Dies sollte zuerst gedruckt werden, jetzt wird es *** "; echo -n "Eingabe eingeben:"; lese -r; 'um das erwartete Ergebnis zu erhalten. – ss005

+0

Richtig, weil dann alles auf "stout" geht und direkt am Stream bestellt wird (auch, es ist alles dann auf 'stdout', was' te' in deinem Anwendungsfall erwartet) –

+0

Oder nur eine andere Alternative 'tee_test 2> & 1 | tee -a logfile Danke Renouf :) – ss005

Verwandte Themen