2010-07-20 18 views
33

नहीं जब तक 3 घंटे का निर्माण स्क्रिप्ट के माध्यम से रास्ते के मध्य में, मुझे याद है कि मैं उत्पादन की शुरुआत में देखने के लिए कुछ करने के बाद यह किया है चाहता हूँ। इस बिंदु पर मैंने अपने टर्मिनल में लाइनों की संख्या पार कर ली है, इसलिए मैं इसे देखने के लिए स्क्रॉल नहीं कर सकता (या शुरुआत करना मुश्किल है)। बेशक मैं अपने आउटपुट को स्टोर करने के बारे में बेहतर हो सकता हूं, लेकिन अगर यह संभव था तो मैं हमेशा उत्सुक रहा हूं।आउटपुट

एक linux खोल में, यह पिछले आदेश के उत्पादन में वापस जाने के लिए संभव है। मुझे एहसास है कि मैं इसे पाइप कर सकता था या आउटपुट को एक फाइल में भेज सकता था, लेकिन मेरी आवश्यकता के बाद आउटपुट को पुनर्प्राप्त करने के लिए है।

सीएसएच का उपयोग करके, लेकिन किसी भी खोल के बारे में सुना होगा।

+0

बैश http://stackoverflow.com/questions/5955577/bash-automatically-capture-output-of-last-executed-command-into-a-variable –

उत्तर

32

नंबर एक कार्यक्रम के उत्पादन में कभी नहीं खोल के हाथों से होकर गुजरता है। पुनर्निर्देशन के बिना, यह सीधे टीटीवी में जाता है। पुनर्निर्देशन के साथ, यह सीधे जो भी फ़ाइल या पाइप को निर्देशित किया गया था, सीधे जाता है। खोल को पता नहीं है कि प्रक्रिया stdout/stderr को क्या भेजी गई है।

+0

धन्यवाद, कि क्या मैं जानना चाहता – ack

1

आप $? के साथ पिछले आदेश की वापसी कोड देख सकते हैं, कम से कम बैश में,।

जहां तक ​​स्टडआउट जाता है, मुझे नहीं लगता कि आप कर सकते हैं।

0

एक चर के रूप में आउटपुट को बचाने के लिए?

bash: Output=$(ls); echo $Output 
+0

वह में कहते हैं चाहता था है उसका सवाल: "मुझे एहसास है कि मैं इसे पाइप कर सकता था या आउटपुट को फाइल में भेज सकता था, लेकिन कमांड चलाने के बाद आउटपुट को पुनर्प्राप्त करना मेरी आवश्यकता है।" –

2

कैसे प्रतिस्थापन का उपयोग कर के बारे में। इस तरह:

command1 
command2 
RESULT=`LASTCOMMAND` 
echo $RESULT

+0

बैकटिक्स ट्रिकियर हिस्सा है। लोग सिंगल या डबल कोट्स का उपयोग करते हैं। – asgs

0

मेरा हो सकता है कि आप टीई कमांड का उपयोग आउटपुट को एक फ़ाइल में भी डाल सकें और फिर इसका इस्तेमाल कर सकें।

3

यह कुछ आदेशों के साथ बहुत गन्दा हो सकता है जो कर्सर एड्रेसिंग का उपयोग करते हैं। आपके विम सत्र का आउटपुट क्या है? या थोड़ा और अधिक उदाहरण: आप wget के साथ एक फ़ाइल डाउनलोड कर रहे हैं, और यह 0% से 100% तक एक प्रतिशत बार दिखाता है। इसका उत्पादन क्या है?

मुझे लगता है कि आप मूल रूप से अपने वर्तमान लाइन और पिछले शीघ्र बीच कुछ भी की एक हार्डकॉपी चाहते हैं। ऐसा कुछ नहीं है जिसके लिए खोल पुनर्निर्देशन एक अच्छा उदाहरण होगा, यह मूल रूप से कुछ टर्मिनल करेगा। आप इसे स्क्रीन में कॉपी और पेस्ट करके मैन्युअल रूप से कर सकते हैं, और हो सकता है कि आप इसे अपने exec कमांड से स्वचालित कर सकें। tmux में कुछ समान हो सकता है, और आप Emacs के खोल मोड (ओं) के साथ अजीब चीजें कर सकते हैं, लेकिन यह एक हेवीवेट समाधान है।

script 
make 
exit 
vim typescript 

script कार्यक्रम एक नया खोल शुरू करने और typescript फाइल करने के लिए इनपुट और आउटपुट की बचत होगी: rxvt-यूनिकोड एक perl extension ...

19

script(1) आपको क्या चाहिए वास्तव में है। जब आप पूरा कर लें, तो exit या ^D के साथ खोल को बंद करें। यदि आप एक नया खोल शुरू नहीं करना चाहते हैं, लेकिन बस अपना निर्माण चलाएं, तो आप इसका उपयोग कर सकते हैं: script -c <command>

+0

यह अच्छा है। मुझे पसंद है कि आप आदेशों के पूरे बैच को लॉग इन करने के लिए इसका उपयोग कैसे कर सकते हैं। – ack

0

यह आपके टर्मिनल का एक कार्य है। आपको एक सेटअप बनाने पर ध्यान देना चाहिए जहां आपको कुछ भी करने की याद नहीं है। लॉगिंग सक्षम के साथ आपकी लॉगिन स्क्रिप्ट (जो सही पाने के लिए इतना आसान नहीं है) में "स्क्रीन" लॉन्च करना एक संभावित समाधान है।

8

यदि आदेश फिर से चलाना कुछ भी नहीं बदलेगा, तो आप इसका उपयोग कर सकते हैं !! अंतिम आदेश को फिर से शुरू करने के लिए इतिहास के शीर्ष तक पहुंचने के लिए। बैकटीक्स में ऐसा करने से आप परिणाम का उपयोग कर सकते हैं।

$> find . -iname fileInUnknownLocationInHierarchy.txt 
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt 
$> vim `!!` 
+0

यह काम करता है लेकिन इसका मतलब है कि कमांड को फिर से चला रहा है। यदि पिछला आदेश एक लंबी खोज थी, तो आपको इसके लिए फिर से इंतजार करना होगा। – Melebius

0

तुम हमेशा प्रक्रिया को चलाने के लिए एक Emacs अंदर खिड़की शैल कर सकते हैं। यह सबकुछ रखेगा।

1

यदि आप अंतिम निष्पादित आदेश के रिटर्न कोड के लिए पूरी तरह से देख रहे हैं, तो echo $? का उपयोग करें।

यह आमतौर पर मदद करता है जब आप यह जानना चाहते हैं कि आपका अंतिम आदेश सफलतापूर्वक निष्पादित किया गया है या आप पास/असफल अलर्ट के लिए इसे अपनी बिल्ड स्क्रिप्ट में भी ढाला कर सकते हैं।