2010-06-29 14 views
30

मैं एक मेकफ़ाइल बना रहा हूं जो एक आउटपुट फ़ाइल (foo.o) को एक अलग निर्देशिका (baz) पर ले जाता है।एमवी त्रुटि को अनदेखा कैसे करें?

आउटपुट फ़ाइल निर्देशिका के लिए वांछित के रूप में चलता है। हालांकि, अगर मैं make टाइप करता हूं तो आउटपुट फ़ाइल को पुन: संकलित नहीं करेगा, mv त्रुटि प्राप्त हो जाती है जब यह गैर-मौजूद खाली फ़ाइल को निर्देशिका baz पर स्थानांतरित करने का प्रयास करती है।

तो यह है कि मैं क्या सभी संकलन के बाद मेरा नियम make all में परिभाषित किया गया है:

-test -e "foo.o" || mv -f foo.o ../baz 

दुर्भाग्य से, मैं अभी भी हो रही है त्रुटियों।

+1

क्या altendky पर देखो क्या किया: -mv foo.o ../baz – Malcolm

उत्तर

9
[email protected][ -d $(dir [email protected]) ] || mkdir -p $(dir [email protected]) 

क्या मैं चुपचाप एक फ़ोल्डर बनाने के लिए अगर यह मौजूद नहीं है का उपयोग करें। आपकी समस्या के लिए कुछ इस तरह काम करना चाहिए

[email protected][ -e "foo.o" ] && mv -f foo.o ../baz 
+0

मैं अभी भी एक पर ध्यान नहीं दिया त्रुटि जब इस का उपयोग करते हुए मिलता है लेकिन सबसे अच्छा समाधान था अब तक। धन्यवाद – Sam

+0

हां आपको अभी भी चुप अनदेखा त्रुटि मिल जाएगी, जिसे मैं पूरी तरह से चुप नहीं कर सकता क्योंकि इसे पूरी तरह से चुप कर देना चाहिए। – Charles

+0

@ कमांड से बनाने से आउटपुट को प्रभावित नहीं करता है, यह केवल इनवोकेशन को प्रिंट न करने के लिए कहता है। – JesperE

1
-test -e "foo.o" || if [ -f foo.o ]; then mv -f foo.o ../baz; fi; 

कि

0

कुछ

तरह
test -e "foo.o" && mv -f foo.o ../baz 

काम करना चाहिए काम करना चाहिए: ऑपरेटर && बजाय || होना चाहिए।

आप इन आदेशों का प्रयास करके इस के साथ प्रयोग कर सकते हैं:

test -e testfile && echo "going to move the file" 
test -e testfile || echo "going to move the file" 
27

मैं कोई भी वास्तव में मूल प्रश्न ही उत्तर दिया है अभी तक नोटिस, विशेषकर त्रुटियों को अनदेखा करने के लिए (सभी उत्तर वर्तमान में आदेश केवल बुला लेकर चिंतित हैं अगर यह कारण नहीं एक त्रुटि)।

वास्तव में त्रुटियों को अनदेखा करने के लिए, आप बस कर सकते हैं:

mv -f foo.o ../baz 2>/dev/null; true 

यह null को stderr उत्पादन रीडायरेक्ट करेगा, और (true साथ आदेश का पालन करें जो हमेशा 0 देता है, के कारण आदेश की परवाह किए बिना सफल रहा विश्वास करने के लिए बनाते हैं वास्तव में क्या हुआ), कार्यक्रम प्रवाह जारी रखने की इजाजत दी।

+3

यह एक अच्छा है।निस्संदेह कोई भी "सत्य" भाग छोड़ सकता है और अगर वे लापता फाइल के बारे में कुछ आउटपुट देखना चाहते हैं तो "-" का उपयोग कर सकते हैं। –

99

Errors in Recipes (TFM से)

एक नुस्खा लाइन में त्रुटियों को अनदेखा करने के लिए, लाइन के पाठ की शुरुआत में एक - बारे में (प्रारंभिक टैब के बाद)।

तो लक्ष्य की तरह कुछ होगा:

moveit: 
    -mv foo.o ../baz 
संबंधित मुद्दे