কাইলের ইউনিক্স / লিনাক্স কমান্ডটি STDOUT দিয়ে STDERR স্যুইচ করার কাজ করে; তবে ব্যাখ্যাটি মোটেই সঠিক নয়। পুনর্নির্দেশকারী অপারেটররা কোনও অনুলিপি বা সদৃশ করে না, তারা কেবল প্রবাহকে একটি অন্য দিকে পরিচালিত করে।
3> & 1 টি অস্থায়ীভাবে শেষের দিকে সরানোর মাধ্যমে কাইলের কমান্ডটি পুনরায় লেখালেখি করা ধারণাটি সহজ করে তুলবে:
find /var/log 1>&2 2>&3 3>&1
যদিও এইভাবে লিখিত হয়েছে, লিনাক্স একটি ত্রুটি প্রদর্শন করবে কারণ 3> & 1 এর আগে অবস্থিত হিসাবে & 3 উপস্থিত নেই। 3> কোনও কিছু হ'ল এটি নির্ধারণ করার (সংজ্ঞায়িত করার) উপায় যা আমরা তৃতীয় পাইপ ব্যবহার করতে যাচ্ছি, সুতরাং পাইপটিতে জল প্রবাহিত করার আগে এটি অবস্থিত থাকতে হবে, উদাহরণস্বরূপ কাইল যেভাবে লিখেছিলেন। মজা করার জন্য এই অন্য উপায়ে চেষ্টা করুন:
((echo "STD1"; anyerror "bbbb"; echo "STD2" ) 3>&1 4>&2 1>&4 2>&3) > newSTDOUT 2> newSTDERR
অনুলিপি করার উপায় না থাকা লজ্জার বিষয়। আপনি একই কমান্ডে "3> & 1 3> & 2" এর মতো জিনিসগুলি করতে পারবেন না, কারণ লিনাক্স কেবল প্রথম পাওয়া প্রথমটি ব্যবহার করবে এবং দ্বিতীয়টি খারিজ করবে।
আমি কোনও ত্রুটি এবং নিয়মিত আউটপুট উভয়ই কোনও ফাইলে প্রেরণ করার জন্য এবং ত্রুটিটির অনুলিপি একটি কমান্ড দিয়ে স্ট্যান্ডার আউটপুট প্রেরণ করার জন্য (এখনও) সন্ধান করতে পারি নি। ইনস্টাসের জন্য, আমার ক্রোন জব রয়েছে যে আমি উভয় আউটপুট (ত্রুটি এবং স্ট্যান্ডার্ড) একটি লগ ফাইলে যেতে চাই এবং ত্রুটিটি আমার ব্ল্যাকবেরিকে প্রেরিত কোনও ইমেল বার্তা তৈরি করতে দেয়। আমি "টি" ব্যবহার করে দুটি কমান্ড দিয়ে এটি করতে পারি তবে ত্রুটিটি ফাইলের নিয়মিত আউটপুট লাইনের মধ্যে সঠিক ক্রমে প্রদর্শিত হয় না। এই সমস্যাটি আমিই সমাধান করেছি:
((echo "STD1"; sdfr "bbbb"; echo "STD2" ) 3>&1 1>&2 2>&3 | tee -a log1 ) 2>> log1
নোট করুন যে আমাকে দুবার লগ 1 ব্যবহার করতে হবে এবং উভয় ক্ষেত্রেই আমাকে যুক্ত করতে হবে, প্রথমটি "টি" কমান্ডের জন্য "-a" বিকল্প ব্যবহার করে এবং দ্বিতীয়টি ">>" ব্যবহার করে ব্যবহার করতে হবে।
একটি বিড়াল লগ 1 করছেন আপনি নিম্নলিখিত পেতে:
STD1
STD2
-bash: sdfr: command not found
লক্ষ্য করুন যে ত্রুটিটি দ্বিতীয় লাইনে যেমনটি হওয়া উচিত তেমনটি প্রদর্শন করে না।