जबकि मुझे नहीं लगता कि पियर की यह चिंता थी, मुझे एक ऐसे समाधान की आवश्यकता थी जो किसी फ़ाइल के लाइव "टेल" से आउटपुट में देरी न करे, क्योंकि मैं एक साथ कई अलर्ट लॉग की निगरानी करना चाहता था, प्रत्येक लाइन को उसके संबंधित लॉग के नाम के साथ प्रीफ़िक्स करना ।
दुर्भाग्य से, सीड, कट, आदि ने बहुत अधिक बफरिंग शुरू की और मुझे सबसे वर्तमान लाइनों को देखने से रोक दिया। स्टीवन पेनी के -s
विकल्प का उपयोग करना nl
पेचीदा था, और परीक्षण ने यह साबित कर दिया कि इसने मुझे चिंतित करने वाली अवांछित बफरिंग का परिचय नहीं दिया।
उपयोग करने के साथ कुछ समस्याएं थीं nl
, हालांकि, अवांछित लाइन नंबरों को छीनने की इच्छा से संबंधित (भले ही आप इसके सौंदर्यशास्त्र के बारे में परवाह नहीं करते हैं, ऐसे मामले हो सकते हैं जहां अतिरिक्त स्तंभों का उपयोग करना अवांछनीय होगा)। सबसे पहले, संख्याओं को अलग करने के लिए "कट" का उपयोग करके बफरिंग समस्या को फिर से पेश किया जाता है, इसलिए यह समाधान को मिटा देता है। दूसरा, "-w1" का उपयोग करने से मदद नहीं मिलती है, क्योंकि यह लाइन नंबर को एक कॉलम में सीमित नहीं करता है - यह अधिक व्यापक हो जाता है क्योंकि अधिक अंकों की आवश्यकता होती है।
यदि आप इसे कहीं और कैप्चर करना चाहते हैं तो यह बहुत अच्छा नहीं है, लेकिन चूंकि मुझे वास्तव में ऐसा करने की आवश्यकता नहीं है (सब कुछ पहले से ही लॉग इन फ़ाइलों के लिए लिखा जा रहा था, मैं सिर्फ एक बार वास्तविक समय में कई देखना चाहता था), सबसे अच्छा लाइन संख्याओं को खोने का तरीका और केवल मेरा उपसर्ग -s
है गाड़ी को वापसी (CR या ^ M या Ctrl-M) के साथ शुरू करना। उदाहरण के लिए:
#!/bin/ksh
# Monitor the widget, framas, and dweezil
# log files until the operator hits <enter>
# to end monitoring.
PGRP=$$
for LOGFILE in widget framas dweezil
do
(
tail -f $LOGFILE 2>&1 |
nl -s"^M${LOGFILE}> "
) &
sleep 1
done
read KILLEM
kill -- -${PGRP}
sed
इस तरह के हल्के कार्यों के लिए पसंद करता हूं । यदि "उपसर्ग" ज्ञात है, तो "उपसर्ग" से नहीं चरित्र को चुनना बहुत आसान है।