2010-08-05 19 views
12

मैं एक लघु खोल स्क्रिप्ट लिख रहा हूं जो 'सभी को' कहता है। यह महत्वपूर्ण नहीं है, लेकिन क्या ऐसा कोई तरीका है जिससे मैं संदेश को दबा सकता हूं कि 'सभी के लिए कुछ भी नहीं किया जाना चाहिए' यदि ऐसा है? मैं ऐसा करने के लिए ध्वज ढूंढने की उम्मीद कर रहा हूं जो इसे दबाता है (सुनिश्चित नहीं है कि एक है), लेकिन अतिरिक्त लाइन या 2 कोड भी काम करेगा।दबाएं "सभी के लिए कुछ भी नहीं किया जाना चाहिए"

FYI मैं बैश का उपयोग कर रहा हूं।

संपादित करें: अधिक स्पष्ट होने के लिए, मैं केवल उन संदेशों को मानना ​​चाहता हूं जिनके लिए कुछ भी नहीं किया जाना है। अन्यथा, मैं आउटपुट प्रदर्शित करना चाहता हूं।

उत्तर

13

आप कर सकते हैं "सभी" एक जाली लक्ष्य (यदि यह पहले से ही नहीं है) एक शर्त के रूप में वास्तविक लक्ष्य है जो, और करता कुछ अगोचर:

.PHONY: all 

all: realTarget 
    @echo > /dev/null 
+10

प्रतिध्वनि के बजाय, आप संभवतः बस कर सकते हैं @: नो-ऑप –

+0

@ विलियम पर्सेल: गली द्वारा, आप सही हैं। मैं कभी नहीं जानता था: 'एक शेल नो-ऑप था ... या मैं कभी ऐसी चीज के लिए उपयोग करता था। – Beta

+1

मुझे यह चुस्त दृष्टिकोण पसंद है। चेतावनी दूर हो जाती है क्योंकि 'अब' के पास कुछ करने के लिए कुछ है, लेकिन यह क्या करता है कुछ भी नहीं है। 'Echo' का एक और विकल्प यह है कि कार्रवाई को' सत्य 'बनाया जाए, जिसे कुछ भी प्रिंट नहीं करना चाहिए और चुपचाप सफल होना चाहिए। – RBerteig

1

झंडा -s मौन बनाने: make -s all

संपादित करें: मैं मूल रूप से उत्तर दिया कि झंडा -q खामोश कर। यह मेरे लिए काम करता है, हालांकि मैनपेज वैध झंडे के रूप में -s, --silent, --quiet निर्दिष्ट करता है।

+0

डब्ल्यू Tenney, मेरे लिए यह है '-s',' --silent' या ' – Anders

+1

--quiet' मैं किया जाना चाहिए था अधिक स्पष्ट। मैं केवल उस मामले को दबाना चाहता हूं जहां फाइलें अद्यतित हैं। अन्यथा मैं आउटपुट दिखाना चाहता हूं। – sas4740

+0

मैंने किसी और को उत्तर दिया और सुझाव दिया कि 'सब कुछ करें grep -v "के लिए कुछ भी नहीं किया जाना चाहिए" लेकिन ऐसा लगता है कि उन्होंने उस उत्तर को हटा दिया। –

0

ग्रेप समाधान:

{ make all 2>&1 1>&3 | grep -v 'No rule to make target `all' >&2; } 3>&1 

निर्माण 2>&1 1>&3 मेकअप के stdout भेजता 3 एफडी और के लिए stdout stderr बनाने के लिए। grep तब पिछले कमांड के stdout से पढ़ता है, अपमानजनक रेखा को हटा देता है और stdr के लिए stdout भेजता है। अंत में, एफडी 3 stdout पर वापस आ गया है।

+0

क्या यह वास्तव में आवश्यक है? Grep -v करने से क्या अलग है? – sas4740

+1

सबसे पहले, मेरे मेकअप पर, वह संदेश stderr पर जाता है, इसलिए कम से कम आपको grep के लिए stderr को कोई प्रभाव नहीं पड़ता है। इसके बाद, आप चाहते थे कि शेष मेक आउटपुट छूटे, इसलिए मैं stdout के साथ stderr मिश्रण नहीं करना चाहता था। अंत में, यह मेरे लिए भी एक सीखने का अभ्यास है। –

6

मैं चाहूँगा पिछले पर सुधार करने के लिए समाधान, बस इसे थोड़ा और अधिक कुशल बनाने के लिए ... :)

.PHONY: all 
all: realTarget 
     @true 
संबंधित मुद्दे

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