बनाओ: कमांड फेल होने के बाद कैसे जारी रखें?


143

कमांड $ make allत्रुटियां देता है जैसे कि rm: cannot remove '.lambda': No such file or directoryयह बंद हो जाता है। मैं यह चाहता हूं कि rm-not-found-त्रुटियों को अनदेखा करें। मैं जबरदस्ती कैसे कर सकता हूं?

makefile

all:
        make clean
        make .lambda
        make .lambda_t
        make .activity
        make .activity_t_lambda
clean:
        rm .lambda .lambda_t .activity .activity_t_lambda

.lambda:
        awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda

.lambda_t:
        paste .lambda t_year > .lambda_t

.activity:
        awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity

.activity_t_lambda:
        paste .activity t_year .lambda  | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex

जवाबों:


264

-iध्वज का प्रयास करें (या --ignore-errors)। प्रलेखन इस तरह से इसे प्राप्त करने के लिए और अधिक मजबूत तरीका सुझाता है:

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

उदाहरण के लिए,

clean:
  -rm -f *.o

यह rmजारी रखने का कारण बनता है भले ही वह किसी फ़ाइल को निकालने में असमर्थ हो।

सभी उदाहरणों के साथ हैं rm, लेकिन उन किसी भी अन्य आदेश पर लागू होते हैं जिनकी आपको (यानी mkdir) त्रुटियों को अनदेखा करने की आवश्यकता होती है ।


30
मत करना कि! आपको त्रुटियों को अनदेखा नहीं करना चाहिए। बस r -f फ्लैग को rm में जोड़ें और यह उन फ़ाइलों को हटाने की कोशिश में विफल नहीं होगा, जो मौजूद नहीं हैं। यह अभी भी वापस आ जाएगा और अगर यह वास्तव में एक फ़ाइल को हटाने में विफल रहता है तो त्रुटि। यही वह व्यवहार है जो आप चाहते हैं, जब कोई समस्या होती है तो असफल हो जाते हैं!
क्रिस्टोफ़ प्रोवोस्ट

15
@ क्रिस्तोफ प्रोवोस्ट सहमत। rm -fउपयोगकर्ता को होने वाली विशिष्ट समस्या के लिए बेहतर है, लेकिन सामान्य समाधान के बारे में जानना अच्छा है, भले ही वह कभी-कभी असुरक्षित हो।
ब्रायन_

1
यह वास्तव में उपयोगी है, एली। धन्यवाद।
डॉ। बीको

1
भी प्रदान करता है $(RM), जो आप के बजाय उपयोग कर सकते हैं rm -f
रीटवॉटरस

32

make -k(या --keep-goingसूक्ति पर) आप वही करेंगे जो आप पूछ रहे हैं, मुझे लगता है।

आपको वास्तव में डेल या आरएम लाइन का पता लगाना चाहिए जो कि विफल हो रही है और -fउस त्रुटि को दूसरों के साथ होने से रखने के लिए इसमें जोड़ें ।


1
मैं कुछ कहना नहीं चाहता था, लेकिन मैं सोच रहा था कि उनकी सोच क्या थी। अगर कोई कारण है कि मैं यह नहीं देखता कि वह झंडा उचित क्यों नहीं होगा, तो यह एक अच्छी बात होगी।
TED

3
आपको त्रुटियों को अनदेखा नहीं करना चाहिए। ब्रायन, ओडेड और नेबुसॉफ्ट द्वारा प्रस्तावित समाधान सही हैं। यह एक और स्वीकृत उत्तर गलत है।
क्रिस्टोफ़ प्रोवोस्ट

1
@ क्रिस्तोफ्रोवोस्ट - आह। काफी मुझे लगता है। आम तौर पर मैं यह भी मानता हूं कि समस्या की जड़ में जो उत्तर मिलते हैं, वे लोगों से बेहतर होते हैं (जैसे यह) कि पूछे गए प्रश्न का उत्तर दें। मुझे यकीन नहीं है कि मैं किसी को उस के लिए नीचा दिखाऊंगा , लेकिन अलग-अलग स्ट्रोक ...
TED

5
अच्छा उत्तर। इसमें एक सीधा, शीर्ष-स्तरीय ध्वज है, जिसमें कोई अन्य उत्तर नहीं है, फिर भी सही व्यवहार की अनुशंसा करता है। त्रुटियों को नजरअंदाज नहीं किया जाना चाहिए, लेकिन विकल्पों को जानना अच्छा है।
brian_o

1
कंपाइलर त्रुटियों को अनदेखा करने के लिए कुछ उपयोगी है ... जो makeसंभव है कि आप जितने भी कंपाइलर को ठीक कर लें, उन्हें ठीक करते समय अधिक से अधिक संकलन इकाइयाँ बनाने की अनुमति देता है। इस तरह जब आप तय कर चुके हैं कि जो कुछ भी टूट गया था, तो आपको अन्य सभी चीजों के लिए भी इंतजार नहीं करना होगा।
inetknght

20

को साफ बदलें

rm -f .lambda .lambda_t .activity .activity_t_lambda

Ie हटाने के लिए संकेत नहीं है; यदि फ़ाइल मौजूद नहीं है तो शिकायत न करें।


16

कमांड के rmसाथ एक पाइप के पीछे के रिटर्नकोड को अवरुद्ध करके सफलतापूर्वक लौटें true, जो हमेशा रिटर्न 0(सफलता) देता है

rm file | true

11

वास्तव में एक पंक्ति में त्रुटियों को अनदेखा करने के लिए, आप इसे केवल इसके साथ प्रत्यय दे सकते हैं ; true, वापसी मान को 0. पर सेट कर सकते हैं: उदाहरण के लिए:

rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true

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


1
यह मेरे लिए काम करता है जहां अग्रणी डैश नहीं होता है (मुझे एक परीक्षण चलाने के लिए एक मेकफाइल दिया जाता है जिसे विफल होने की आवश्यकता होती है, और बाद में लॉग को पार्स कर देगा)
शॉन हुलिएन

2

अपने को बदलो cleanतो rmशिकायत नहीं होगी:

clean:
    rm -f .lambda .lambda_t .activity .activity_t_lambda

1

-fअपनी rmकमांड में एक विकल्प रखें ।

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