पुनर्निर्देशित शेल कमांड एक और कोनोसोल शेल के लिए आउटपुट करता है


4

मैं एक शेल स्क्रिप्ट लिख रहा हूं और मैं स्क्रिप्ट में कमांड लिखना चाहूंगा लेकिन आउटपुट को अन्य कॉनसोल सत्रों में रीडायरेक्ट करूंगा। (kde का उपयोग करके)

linux  bash  shell  unix 

जवाबों:


4

सबसे पहले, उस संख्या की तलाश करें जो वर्तमान tty सत्र को पहचानती है; संख्या पर विचार करें X:

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $                         |
| /dev/pts/X               |                           |

फिर, चयनित संख्या को लिखने के लिए दी गई संख्या का उपयोग करें:

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $ echo "foo" > /dev/pts/X |
| /dev/pts/X               |                           |

और यह उत्पादन करेगा:

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $ echo "foo" > /dev/pts/X |
| /dev/pts/X               |                           |
| foo                      |                           |

3

आप आउटपुट को एक लॉग फ़ाइल में पाइप कर सकते हैं जो अन्य सत्रों द्वारा पूंछा गया है।

किसी अन्य टर्मिनल में:

touch foo && tail -f foo

"मुख्य" टर्मिनल में:

script.sh > foo

0

अपने वर्तमान में टर्मिनल के बजाय फ़ाइल के लिए टर्मिनल आउटपुट प्रिंट करें:

commands >>outputfile

नए टर्मिनल में, आउटपुटफाइल की सामग्री दिखाने के लिए टेल का उपयोग करें और अधिक टेक्स्ट जोड़े जाने पर इसे स्वचालित रूप से अपडेट करें:

tail -f outputfile

0

देर से लेकिन शायद बेहतर तो कभी नहीं ... :-)

mkfifo ~/MyOutput           # Create the FIFO (Special file) 

./MyScript.sh > ~/MyOutput  # In the terminal/console 1
cat ~/MyOutput              # In another tty/console

से info coreutils 'mkfifo invocation':

एक "FIFO" एक विशेष फ़ाइल प्रकार है जो संचार के लिए स्वतंत्र प्रक्रियाओं की अनुमति देता है। लिखने के लिए एक प्रक्रिया FIFO फाइल को खोलती है, और दूसरी पढ़ने के लिए, जिसके बाद डेटा गोले या अन्य जगहों पर सामान्य अनाम पाइप की तरह बह सकता है।

साइड नोट्स:

  • FIFO को अपने होम डायरेक्टरी में नहीं बनाना बेहतर है :-)
  • आप एक FIFOही प्रक्रिया (std out, std इरेट) के लिए एक से अधिक हो सकते हैं ।
  • जब तक आप एक डंप नहीं पूछेंगे, FIFOsतब तक यह सभी आउटपुट को रोक देगा।
    जैसा कि आप पहली बार पूछेंगे, यह सभी को बाहर कर देगा ।
  • आप किसी अन्य फ़ाइल पर रीडायरेक्ट (या एपेंड) कर सकते हैं cat MyOutput >> NewRealFile
  • आप cat MyOutputदूसरे टर्मिनल से भी उपयोग कर सकते हैं !
  • चेतावनी : यदि आप उत्पादन में पुनर्निर्देशित करने के लिए 2 अलग-अलग कार्यक्रमों (या उदाहरणों) से पूछते हैं FIFOs, तो प्रवाह को विलय कर दिया जाएगा (कोई प्राथमिकता नहीं कि उन कार्यक्रमों से अंतर करने के लिए जो उस पंक्ति से आते हैं)।
  • चेतावनी : यदि आप 2 या अधिक बार (शायद अलग-अलग टर्मिनलों से) पूछते हैं, तो यह आउटपुट में प्रत्येक अनुरोध के लिए एक लाइन देगा जो आवश्यक रूप से आउटपुट को विभाजित करता है।
  • इसके और अधिक जटिल उपयोग हो सकते हैं: किसी प्रोग्राम को ठीक से कैसे लॉन्च किया जाए और बाद के स्टेज पर इसके रनिंग आउटपुट (स्टडआउट और स्टैडर) को रीडायरेक्ट करना संभव है?

0

ttyउन्हें पहचानने के लिए प्रत्येक टर्मिनल में कमांड का उपयोग करें:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

इन TTYs को मानते हुए, पहले के स्टडआउट को दूसरे पर पुनर्निर्देशित करने के लिए, इसे पहले टर्मिनल में चलाएं:

exec 1>/dev/pts/1

नोट: अब हर कमांड आउटपुट pts / 1 पर दिखाई देगा

Pts / 0 के डिफ़ॉल्ट व्यवहार को रोकने के लिए:

exec 1>/dev/pts/0

प्रदर्शन के लिए यह वीडियो देखें ।

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