তৈরি করুন: কোনও কমান্ড ব্যর্থ হওয়ার পরে কীভাবে চলতে হবে?


143

কমান্ড $ make allত্রুটি দেয় যেমন rm: cannot remove '.lambda': No such file or directoryএটি বন্ধ হয়ে যায়। আমি এটি আরএম-না-পাওয়া-ত্রুটিগুলি উপেক্ষা করতে চাই। আমি কীভাবে জোর করে তৈরি করতে পারি?

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
না না যে! আপনার ত্রুটিগুলি উপেক্ষা করা উচিত নয়। আরএম-এ কেবল -f পতাকাটি যুক্ত করুন এবং অস্তিত্বহীন ফাইলগুলি মুছতে চেষ্টা করার সময় এটি আর ব্যর্থ হবে না। এটি তবুও ফিরে আসবে এবং ত্রুটি ঘটবে যদি এটি কোনও ফাইল মুছতে সত্যিই ব্যর্থ হয়। আপনারা চাইছেন এমন আচরণ, সমস্যা হলেই ব্যর্থ হন!
ক্রিস্টফ প্রোভস্ট

15
@ ক্রিস্টফ প্রোভস্ট সম্মত হয়েছেন। rm -fব্যবহারকারীর যে নির্দিষ্ট সমস্যা রয়েছে সেটির জন্য এটি আরও ভাল তবে সাধারণ সমাধান সম্পর্কে জানার পরেও এটি কখনও কখনও অনিরাপদ হলেও এটি চমৎকার।
brian_o

1
এটি সত্যিই দরকারী, এলি। ধন্যবাদ.
ডাঃ বেকো

1
Make এছাড়াও সরবরাহ করে $(RM), যা আপনি পরিবর্তে ব্যবহার করতে পারেন rm -f
রিটারমার্কাস

32

make -k(বা --keep-goingজ্ঞানমাকে) আপনি যা চাইছেন তা করবে, আমার ধারণা।

আপনার সত্যিকারের ডেল বা আরএম লাইনটি ব্যর্থ হচ্ছে -fএটি সন্ধান করা উচিত এবং অন্যদের মধ্যে ত্রুটিটি ঘটতে না দেওয়ার জন্য এটিতে একটি যুক্ত করা উচিত।


1
আমি কিছু বলতে চাইনি, তবে আমি ভাবছিলাম তাদের চিন্তাভাবনাটি কী। যদি এমন কোনও কারণ থাকে যা আমি দেখতে না পাই যে পতাকাটি কেন উপযুক্ত হবে না, তবে এটি সামনে আনাই ভাল।
টেড

3
আপনার ত্রুটিগুলি উপেক্ষা করা উচিত নয়। ব্রায়ান, ওদেড এবং নেবুসফ্ট প্রস্তাবিত সমাধানটি সঠিক। এটির একটি এবং গৃহীত উত্তরটি ভুল।
ক্রিস্টফ প্রভোস্ট

1
@ ক্রিস্টফপ্রোভস্ট - আহ। আমি যথেষ্ট অনুমান। সাধারণত আমি এমন প্রশ্নের উত্তরও বিশ্বাস করি যা সমস্যার মূলে রয়েছে এমন প্রশ্নের চেয়ে উত্তম (যেমন এর মতো) যা নিখুঁতভাবে জিজ্ঞাসিত প্রশ্নের উত্তর দেয়। আমি নিশ্চিত নই যে আমি এর জন্য কাউকে নীচে নামিয়েছি , তবে বিভিন্ন স্ট্রোক ...
টেড

5
চমৎকার উত্তর. এটিতে একটি সরল, শীর্ষ স্তরের পতাকা রয়েছে যা অন্য কোনও উত্তর নেই, তবুও সঠিক আচরণের প্রস্তাব দেয়। ত্রুটিগুলি উপেক্ষা করা উচিত নয়, তবে বিকল্পগুলি জানা ভাল।
brian_o

1
করার জন্য দরকারী কিছু হ'ল সংকলক ত্রুটিগুলি উপেক্ষা করা ... যা makeআপনি যতটা সংকলন ইউনিট তৈরি করতে সক্ষম হন ঠিক তেমনই আপনি যখন যান ঠিক করতে যান সংকলকটি যা ঠিক করেছেন। এইভাবে যখন আপনি যা ভাঙা হয়েছিল তা স্থির করে ফেললেন, আপনাকে অন্য সমস্ত কিছু তৈরি করার জন্য অপেক্ষা করতে হবে না।
inetknght

20

ক্লিন এ পরিবর্তন করুন

rm -f .lambda .lambda_t .activity .activity_t_lambda

অর্থাৎ অপসারণের জন্য অনুরোধ করবেন না; ফাইল উপস্থিত না থাকলে অভিযোগ করবেন না।


16

কমান্ডটি rmসহ পাইপের পিছনে থাকা রিটার্নকোডটি ব্লক করে সফলভাবে ফিরে আসুন true, যা সর্বদা ফিরে আসে 0(সাফল্য)

rm file | true

11

কোনও এক লাইনে ত্রুটিগুলি উপেক্ষা করার জন্য, আপনি সহজেই এটি প্রত্যয় করতে পারেন ; true, ফিরে মানটি 0 এ সেট করে উদাহরণস্বরূপ:

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

এটি স্টার্ডার আউটপুটটি বাতিল হয়ে যাবে এবং সত্য দিয়ে কমান্ডটি অনুসরণ করবে (যা সর্বদা 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.