2012-03-16 13 views
20

में आउटपुट फ़ाइल में लाइन ब्रेक जोड़ना मेरे पास एक शेल स्क्रिप्ट है जिसे मैं सिगविन में निष्पादित कर रहा हूं (शायद यह समस्या है)। कोड के इस बिट के लिए, मैं बस पहली पंक्ति लिखने के लिए, और संलग्न एक लाइन ब्रेक चाहते हैं:शेल स्क्रिप्ट

echo "`date` User `whoami` started the script." >> output.log 
echo >> output.log 

लेकिन output.log फ़ाइल कभी नहीं ब्रेक लेने के लिए लगता है। यदि मैं कई बार स्क्रिप्ट चलाता हूं, तो ऐसा लगता है कि दूसरी गूंज फ़ाइल को नहीं लिखती है।

मैं भी कोशिश की है:

echo -e "`date` User `whoami` started the script.\n" >> output.log 

यह पैदावार ही परिणाम।

अजीब बात यह है कि अगर मैं फ़ाइल में शामिल किए बिना कमांड लाइन पर उपरोक्त दूसरा गूंज कथन दर्ज करता हूं, तो यह मुझे पिछली लाइन ब्रेक के साथ अपेक्षित आउटपुट देता है।

+0

अजीब। आप कैसे निर्धारित करते हैं कि न्यूलाइन नहीं जोड़े गए हैं? –

+0

असल में, मैंने देखा कि ऐसा लगता है कि जिस प्रोग्राम में मैं लॉग इन खोल रहा हूं वह एलएफ को सही तरीके से व्याख्या नहीं कर रहा है, और विंडोज लाइन ब्रेक की उम्मीद कर रहा है। अगर मैं आउटपुट को बिल्ली देता हूं, तो ऐसा लगता है कि ब्रेक का सम्मान होता है। – Ode

उत्तर

24

मैं इस समस्या दांव लगा रहा है कि Cygwin फाइल करने के लिए यूनिक्स लाइन अंत (वामो) लिख रहा है, और आप इसे खोलने जा रहे है एक प्रोग्राम के साथ जो विंडोज लाइन-एंडिंग्स (सीआरएलएफ) की अपेक्षा करता है। कहीं ऐसा तो नहीं — है निर्धारित करने और एक hackish वैकल्पिक हल का एक सा के लिए करने के लिए — कोशिश:

echo "`date` User `whoami` started the script."$'\r' >> output.log 

(जहां अंत में $'\r' एक अतिरिक्त गाड़ी-रिटर्न है, यह, प्लस यूनिक्स लाइन को समाप्त परिणाम होगा एक विंडोज लाइन अंत में)।

+0

यह पूरी तरह से काम किया।यूनिक्स बनाम विंडोज लाइन के अंतराल के बारे में परिकल्पना समस्या थी – Ode

18

प्रयास करें:

echo "`date` User `whoami` started the script."$'\n' >> output.log 

या बस:

echo $'\n' >> output.log 
+0

ध्यान दें कि कमांड-प्रतिस्थापन '$ '...'' के भीतर नहीं किया जाता है, ताकि संस्करण 'तारीख' और 'व्हामी' चलाने के बजाए वास्तविक स्ट्रिंग, बैकटिक्स और "डेट" और "व्हामी" और सभी को प्रिंट करेगा। 'आदेश। – ruakh

+0

@ruakh - अच्छी पकड़। मैंने यह नहीं देखा। मैंने अपना जवाब अपडेट किया। –

+0

"$" \ n 'काम नहीं किया, खंडहर के समाधान से "$" \ r' करने की आवश्यकता है। हालांकि बहुत बहुत धन्यवाद! – Ode

3

आपको लगता है कि एक आई/ओ पुनर्निर्देशन बिना कर सकते हैं:

find dir -name filepattern | xargs sed -i 's/$/\n/' filename 

echo के लिए, कुछ गोले:

sed -i 's/$/\n/' filename 

आप भी इस आदेश का उपयोग कर सकते हैं फ़ाइलों की एक सूची के लिए एक नई पंक्ति संलग्न करने के लिए इसे एक शैल बिल्टिन कमांड के रूप में कार्यान्वित करें। यह -e विकल्प स्वीकार नहीं कर सकता है। यदि आप अभी भी echo का उपयोग करना चाहते हैं, तो which echo का उपयोग करके echo बाइनरी फ़ाइल कहां है, यह जानने का प्रयास करें। ज्यादातर मामलों में, यह /bin/echo में स्थित है, इसलिए आप एक नई लाइन गूंजने के लिए /bin/echo -e "\n" का उपयोग कर सकते हैं।

2

प्रयास करें

echo -en "`date` User `whoami` started the script.\n" >> output.log 

इस कई बार जारी करने का प्रयास करें। मुझे उम्मीद है कि आप एक ही आउटपुट की तलाश में हैं।

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