आउटपुट को स्क्रीन के साथ-साथ फ़ाइल में रीडायरेक्ट कैसे करें?


12

मेरा उद्देश्य स्क्रिप्ट से सभी आउटपुट को एक निर्देशिका में लॉग करना है जिसे स्क्रिप्ट बनाने जा रहा है।

उदाहरण के लिए, मेरे पास:

~/.abc.sh:

#! /bin/bash
rails new myapp

जब मैं चला ...

cd ~/code
. ~/.abc.sh

... जो डायरेक्टरी में एक नया रेल ऐप बनाएगा ~/code/myapp

जब रेल एक ऐप बना रही होती है, तो यह बहुत सारे टेक्स्ट को आउटपुट करती है जिसे मैं उसी फ़ाइल में लॉग फ़ाइल में कैप्चर और स्टोर करना चाहता हूं, जिस railsकमांड को नया बनाया गया है। मैं उस पाठ को टर्मिनल में भी प्रदर्शित करना चाहता हूं।

मैं यह कार्य कैसे करूं?

जवाबों:


23

आप इसके लिए teeकमांड का उपयोग कर सकते हैं :

command | tee /path/to/logfile

शेल को लिखे बिना समतुल्य होगा:

command > /path/to/logfile

यदि आप >>शेल में आउटपुट जोड़ना चाहते हैं ( ) और आउटपुट दिखाना चाहते हैं , तो -aविकल्प का उपयोग करें :

command | tee -a /path/to/logfile

कृपया ध्यान दें कि पाइप केवल स्टडआउट को पकड़ेगा, स्टडर को त्रुटियों को पाइप द्वारा संसाधित नहीं किया जाता है tee। यदि आप त्रुटियों (stderr से) को लॉग करना चाहते हैं, तो उपयोग करें:

command 2>&1 | tee /path/to/logfile

इसका मतलब है: commandstderr (2) को stdout (1) पर चलाएँ और पुनर्निर्देशित करें। कि teeआवेदन के साथ पाइप को पारित किया जाएगा ।


क्या आपका मतलब है ~/.abc.sh | tee <file>? यदि ऐसा है, तो मुसीबत यह है कि मुझे पता नहीं है कि मैं किस निर्देशिका में कॉल करते समय ऐप बनाने जा रहा हूं, इसलिए मुझे कैसे पता चलेगा कि fileतर्क में क्या देना है? (महान उदाहरणों के लिए धन्यवाद)
Zabba

@ ज़ब्बा: एक अस्थायी फ़ाइल बनाने और इसे बाद में स्थानांतरित करने के बारे में क्या?
लीकेनस्टाइन

ठीक है, कि काम करना चाहिए :)। उस के संबंध में, मैं एक यादृच्छिक नाम के साथ एक अस्थायी फ़ाइल कैसे बना सकता हूं जिसे मैं बाद में आउटपुट कर सकता हूं और फिर वांछित स्थान पर कॉपी कर सकता हूं? क्या "अस्थायी फ़ाइल नाम" प्राप्त करने के लिए कुछ अंतर्निहित कमांड हैं?
Zabba

@ ज़ब्बा: उसके लिए कमान है mktemp। मैनुअल पेज देखें man mktemp
लेकेनस्टाइन

A, एक आकर्षण की तरह काम करें
सन जुनन

0

scriptएक संवादात्मक सत्र शुरू करेगा और सभी आउटपुट (stdout / stderr आदि) को एक फ़ाइल में -cलॉग करेगा , या ( पैरामीटर के साथ ) एक कमांड चलाएगा और उस के आउटपुट को लॉग करेगा।

script -c ~/.abc.sh -f abc.log

नोट: एक इंटरैक्टिव सत्र में, आप रिकॉर्डिंग बस के रूप में (जैसे आप सामान्य से बाहर निकलते समय से बंद कर सकते हैं exitया Ctrl-D)।

वीडियो प्लेबैक के साथ सत्र रिकॉर्डिंग के लिए, आप एसिंसीमा भी आज़मा सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.