উত্তর:
&মধ্যে 2>&1সহজভাবে বলছেন যে সংখ্যা 1একটি ফাইল বর্ণনাকারী এবং একটি ফাইল নাম। এই ক্ষেত্রে standard output file descriptor।
আপনি যদি ব্যবহার করেন , তবে এটির 2>1নামক কোনও ফাইলে ত্রুটিগুলি পুনর্নির্দেশ করবে 1তবে আপনি যদি ব্যবহার করেন 2>&1তবে এটি এটিতে প্রেরণ করবে standard output stream।
এটি &>উভয় standard outputএবং standard errorকোথাও পাঠান বলে । উদাহরণস্বরূপ ls <non-existent_file> &> out.file,। এটি একটি উদাহরণ দিয়ে বর্ণনা করি।
সেটআপ:
kokoনিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল তৈরি করুন :
#!bin/bash
ls j1
echo "koko2"
এটি সম্পাদনযোগ্য করুন: chmod u+x koko
এখন নোট করুন যে j1অস্তিত্ব নেই
এখন চালান ./koko &> output
চালাও cat outputএবং আপনি দেখতে পাবেন
ls: cannot access 'j1': No such file or directory
koko2
, standard error( ls: cannot access 'j1': No such file or directory) এবং standard output( koko2) উভয়ই ফাইলে প্রেরণ করা হয়েছিল output।
এখন আবার এটি চালান তবে এবার ভালো লেগেছে:
./koko > output
করুন cat outputএবং আপনি কেবল এর koko2মত দেখতে পাবেন । ls j1কমান্ড থেকে ত্রুটি আউটপুট না । এটি আপনাকে পাঠানো হবে standard errorযা আপনি আপনার টার্মিনালে দেখবেন।
গুরুত্বপূর্ণ নোটটি @ বাইট কমান্ডারকে ধন্যবাদ:
নোট করুন যে command >file 2>&1পুনর্নির্দেশের ক্রমটি গুরুত্বপূর্ণ। আপনি যদি command 2>&1 >fileপরিবর্তে লিখেন (যা সাধারণত আপনি যা চান তা নয়), এটি প্রথমে কমান্ডের stdoutফাইলটি পুনর্নির্দেশ করবে এবং তারপরে কমান্ডটিকে stderrতার এখন অব্যবহৃত অবস্থায় পুনঃনির্দেশিত করবে stdout, সুতরাং এটি টার্মিনালে প্রদর্শিত হবে এবং আপনি এটিটি পাইপ করতে বা পুনঃনির্দেশ করতে পারবেন আবার, তবে এটি ফাইলটিতে লেখা হবে না।
command >file 2>&1পুনর্নির্দেশগুলির ক্রমে গুরুত্বপূর্ণ। আপনি যদি command 2>&1 >fileপরিবর্তে লিখেন (যা সাধারণত যা চান তা নয়) তবে এটি প্রথমে কমান্ডের স্টডআউটটি ফাইলে পুনর্নির্দেশ করবে এবং এরপরে কমান্ডের স্ট্ডারকে তার এখন অব্যবহৃত স্টাডাউটে পুনর্নির্দেশ করবে, সুতরাং এটি টার্মিনালে প্রদর্শিত হবে এবং আপনি এটি পাইপ করতে পারেন বা এটি পুনর্নির্দেশ করুন, তবে এটি ফাইলটিতে লেখা হবে না।
standard outputযা আপনি আপনার টার্মিনালে দেখবেন" " এই "যাও" করা উচিত নয় standard error?
> FILE 2>&1এবং &> FILEসমতুল্য। 8.2.3.2 দেখুন । ত্রুটি পুনঃ দিকনির্দেশ এর শিক্ষানবিশদের অধ্যায় 8 ব্যাশ গাইড
&> FILEকেবল বাশের জন্য নির্দিষ্ট যেখানে >FILE 2>&1আরও বেশি সংখ্যক শেল বোঝা যায়।
[n]>&wordবলা হয় অনুরূপ আউটপুট ফাইল বর্ণনাকারী (দেখুন অধ্যায় 2.7.6 POSIX শেল ভাষা স্ট্যান্ডার্ড)। এই বিশেষ আচরণ সহ শেল, বোর্ন মত এর বৈশিষ্ট্য ksh, dashএবং bash; আসলে, স্ট্যান্ডার্ডটি বোর্ন শেল এবং ksh। মধ্যে খুঁজছেন tcsh শেল এবং csh এর মূল ম্যানুয়াল, তারা দৃশ্যত যেকোনো ফাইল বর্ণনাকারী অনুরূপ ক্ষমতা প্রদান করবেন না, বিবরণ থেকে অবশ্য >&, এই আচরণ করবে &>মধ্যে bash(যে, পুনঃনির্দেশ ত্রুটি এবং ফাইলে স্বাভাবিক আউটপুট)।
উবুন্টু সহ সিস্টেমগুলির মতো * নিক্সে, আপনি প্রায়শই শুনতে পান যে সবকিছু ফাইল, বা একটি ফাইল বিবরণকারী । স্ট্যান্ডার্ড আউটপুটটি ধ্রুব ফাইল ডেস্ক্রিপ্টর 1 এবং স্ট্যান্ডার্ড ত্রুটি ফাইল ডেস্ক্রিপ্টর 2 হয়। সুতরাং, > FILE 2>&1প্রযুক্তিগতভাবে ফাইল ডেস্ক্রিপ্টারে 2 ডুপ্লিকেট ফাইল বর্ণনাকারী 2 বোঝানো হয়। এই উত্তরের অন্য কথায় :
2> & 1 শেলটিকে একটি ফাইল বর্ণনাকারী 2 দেওয়ার জন্য শেলকে বলে যা ডেস্ক্রিপ্ট 1 এর সদৃশ। (যেমন স্ট্যাডার এবং স্টাডআউট পয়েন্ট একই এফডি)।
এখানে মূল কীটি হ'ল ডেস্ক্রিপ্ট 1 টি প্রথমে সেট করতে হবে। শেল প্রসেস পুনঃনির্দেশগুলি সঠিক অনুক্রমে বামে কারণ, command >FILE 2>&1বৈদ্যুতিক তার লাগানো stdout- এ শেল বলে জন্য commandঢোকা FILEপ্রথম, এবং শুধুমাত্র তারপর বর্ণনাকারী 2 1 কপি, যে হয় 1 এবং 2 একই অবস্থানে বিন্দু হতে পারে - FILE।
এটি অবশ্যই স্ট্যান্ডার্ড ত্রুটি এবং স্ট্যান্ডার্ড আউটপুট ছাড়িয়ে যায়। হিসাবে এই উত্তরে প্রদর্শন করুন , করে3&>2
... আপনি ফাইললিপি 3 তে নকল করুন (ডুপ 2) ফাইলড্রিপিটার 3-তে, সম্ভবত ইতিমধ্যে ফাইলডেস্কিটার 3 বন্ধ থাকলে
অনেকের মধ্যে ফাইল বর্ণনাকারীদের হেরফেরের উদাহরণ হ'ল dialogকমান্ডের আউটপুটটি ভেরিয়েবলের মধ্যে ক্যাপচার করা হবে
এটি &>নির্দিষ্ট করার জন্যও লক্ষণীয় bash। এতে zshএকই আচরণ করে তবে ডকুমেন্টেশন অনুসারে, "... মাল্টোসের উপস্থিতিতে '> শব্দ 2> & 1' এর মতো প্রভাব থাকে না"। পসিক্স অনুবর্তীতে /bin/sh, এটি ব্যাকগ্রাউন্ডে কমান্ড স্থাপনের সাথে নিয়মিত পুনঃনির্দেশ হিসাবে বিবেচিত হবে। এটি আরও দেখুন, এমন কোনও শ কোড আছে যা সিনট্যাক্টিক্যালি বৈধ বাশ কোড নয়? ।
আরো দেখুন:
&>মানে?