ব্যাশ শেলের ক্ষেত্রে আমি মনে রাখার সবচেয়ে ভাল উপায়টি হ'ল যা ঘটছে তা বোঝা।
আপনি যদি যা করতে চান তার মধ্যে যদি আদেশটি সঠিকভাবে পেতে হয় তবে তা আপনি মনে করতে পারেন
program > /results 2> /results
এটি দুর্দান্ত এবং সুস্পষ্ট যা চলছে এবং মনে রাখা সহজ। অর্থাত
1 STDOUT যাচ্ছে /results
2Stderr এছাড়াও যাচ্ছে সরাসরি করতে/results
সমস্যাটি হ'ল এটি যেমনটি আপনি আশা করেন তেমন কাজ করে না। নিম্নোক্ত বিবেচনা কর:
ফাইল: /tmp/poem.txt
the quick brown fox jumped over the lazy dog
এবং রান কমান্ড
grep "brown" /tmp/poem.txt NOT_A_FILE > /tmp/results 2> /tmp/results
তারপর
$ cat /tmp/results
grep: NOT_A_FILE: No such file or directory
lazy dog
সেখানে কি ঘটেছিল?
আমার বুদ্ধিটি এসটিডিআরআরকে সরাসরি ফাইলে নির্দেশ করে পুনঃনির্দেশটি সেটাকে সেট আপ করা /tmp/resultsএবং প্রকৃতির কারণ >যা 2 টি কাজ করে
- সাধারণত একটি নতুন ফাইল তৈরি করুন - এক্ষেত্রে সুযোগটি পাস হওয়ার সাথে সাথে আউটপুট তৈরি হওয়ার সময় বাশ এই রুটিনটি পেরিয়ে গেছে।
- সরাসরি ফাইলের শুরুতে sertোকান। এবং যেমন সংযোজন
>>না।
সুতরাং এই ক্ষেত্রে এসটিডিআরআর, সরাসরি এসটিডিআউট /tmp/resultsআউটপুটকে ওভাররাইড করার শুরুতে সন্নিবেশ করায় ।
দ্রষ্টব্য: আপনি যদি >>সংযোজন করতেন তবে আপনি সম্ভবত এই বাক্য গঠনটি সরিয়ে ফেলতে পারেন।
তবে আপনার প্রয়োজনীয় সমস্যাটি সমাধান করার জন্য - এসটিডিআরআর - সরাসরি ফাইলে পুনর্নির্দেশ করা নয়, বরং এসটিডিআরআর এর আউটপুটটি STDOUT প্রবাহে একীভূত করার জন্য , যাতে আপনি কোনও সংঘর্ষ না পান।
অপারেটর 2>&1অপারেটর ব্যবহার করে এটি অর্জন করে
grep "brown" poem.txt NOT_A_FILE > /tmp/results 2>&1
&নামে একটি ফাইল থেকে পার্থক্য ব্যাশ সম্ভব 1এবং 1ফাইল বর্ননাকারী।
আমার কাছে বিবৃতি 2>&1নিজেই ব্যাখ্যা করছে যা ঘটছে - এসটিডিআরআর নিজেই এসটিডিআউটে পুনঃনির্দেশিত হচ্ছে - এবং কেবলমাত্র /tmp/resultsএখানেই শেষ হয় কারণ যেখানে স্টাডুট নির্দেশিত (প্রায় পার্শ্ব প্রতিক্রিয়া হিসাবে) ts অনেকগুলি গাইডের বিপরীতে
, যা এটি 2>&1এসটিডিআরআর প্রেরণ করে যেখানে কখনও স্টাডিআউটকে নির্দেশ করা হয়। যদি এটি সত্য হয় - আপনার তখনও ওভাররাইটিং সমস্যা থাকবে।
আরও তথ্যের জন্য দেখুন - http://mywiki.wooledge.org/BashGuide/InputAndOutput#File_Redirection
program 1> /dev/null 2>/dev/null। কিছু সময় যদিও আপনাকে একত্রে মিশ্রিত করতে হবেstdoutএবংstderrসত্যিকার অর্থে কী চলছে তা দেখার জন্য - যেমন একটি জটিল সংকলন প্রক্রিয়া থেকে আউটপুট কোনও ফাইলে পুনঃনির্দেশিত হচ্ছে like