&& द्वारा निर्देशित आदेशों का आउटपुट / पुनर्निर्देशन कैप्चर करना


11

मेरे पास आदेशों की एक श्रृंखला है a, b, c जिसे मैं &&: के साथ एक साथ जोड़ रहा हूं a && b && c

मैं stdout और stderr दोनों के लिए सभी कमांड के आउटपुट को पकड़ना चाहता हूं। a && b && c 2>&1 > capture_file केवल c कमांड से आउटपुट कैप्चर करता है।

जवाबों:


11
{ a && b && c; } >capture_file 2>&1

पुनर्निर्देशन के क्रम पर ध्यान दें: आपको पहले स्टडआउट को पुनर्निर्देशित करना होगा।


पहले क्यों रुकें?
Tlolczyk

@Tlolczyk का 2>&1मतलब है कि stdout (1) से stderr (2) के गंतव्य की नकल करना, इसलिए यह तब तक बेकार होगा जब तक आप पहले से stdout पुनर्निर्देशन सेट नहीं करते।
ययागशी

2
@Tlolczyk यह पहले stdout होना जरूरी नहीं है - आप पहले stderr कर सकते हैं: 2>capture_file >&2(लेकिन ऐसा नहीं है, क्योंकि यह मुहावरा नहीं है )। महत्वपूर्ण बात यह है कि आप उनमें से एक को उस स्ट्रीम को दूसरे से डुप्लिकेट करने से पहले फाइल करने के लिए रीडायरेक्ट करते हैं।
टोबी स्पाईट

1

कमांड ग्रुपिंग का उपयोग करने के अलावा, {}आप कमांड को एक सबशेल में भी चला सकते हैं और आउटपुट (और / या त्रुटि) को एक ही बार में कैप्चर कर सकते हैं:

( a && b && c ) >file.txt 2>&1

उदाहरण :

$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1

$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
 Command 'echo' from package 'coreutils' (main)
echos: command not found
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.