2016-05-02 12 views
6

स्क्रिप्ट और आउटपुट के रूप में नीचे है:टी आदेश काम नहीं कर रहा (साथ पढ़ने और मेल खाती है) के रूप में उम्मीद

स्क्रिप्ट:

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

मैं संलग्न करने के लिए कोशिश कर रहा हूँ लॉगफाइल करने के लिए आउटपुट। लेकिन जैसा कि आप आउटपुट में देख सकते हैं, ऐसा लगता है कि पहले पढ़ने को उत्साहित हो जाता है और फिर गूंजता है जो अपेक्षित नहीं है।

मैं विंडोज 10 पर गिट बैश संस्करण 3.1.23 का उपयोग कर रहा हूं। चूंकि नामित पाइप इस संस्करण में उपलब्ध नहीं है, इसलिए मैं लॉगिंग उद्देश्य के लिए नामित पाइप का उपयोग नहीं कर सकता।

+2

'read' stderr पर इसके शीघ्र प्रदर्शित करता है अपने echo भी stderr करने के लिए जाना हो सकता था। Stdout पर आपका 'echo' प्रदर्शित करता है। – bishop

उत्तर

9

read -pstderr और echo पर इसका आउटपुट लिख रहा है stdout पर लिख रहा है। stdout आमतौर पर बफर किया जाता है जबकि stderr नहीं है, और इसलिए stderr चीजें stdout से पहले दिखाई देने वाली असामान्य नहीं हैं।

यदि आप या echo "string" >&2 करके चाहते आप unbuffer आदेश या इसी तरह के उपकरणों में इसे चलाने सकता है अगर आप उन्हें उपलब्ध

+0

मुझे मिल गया। तो मैं 'गूंज' भी लिख सकता हूं *** इसे पहले मुद्रित किया जाना चाहिए, अब यह *** होगा; echo -n "इनपुट दर्ज करें:"; पढ़ना अपेक्षित परिणाम प्राप्त करने के लिए। – ss005

+0

ठीक है, क्योंकि तब सबकुछ 'stdout' पर जा रहा है और स्ट्रीम पर सही आदेश दिया जाएगा (साथ ही, यह सब' stdout' पर है जो आपके उपयोग मामले में 'टीई' की अपेक्षा करेगा) –

+0

या, बस एक और वैकल्पिक 'tee_test 2> और 1 | tee -a logfile 'धन्यवाद Renouf :) – ss005

संबंधित मुद्दे