আমি জানি যে >
কমান্ড লাইনে আউটপুট পুনঃনির্দেশের জন্য সাইনটি ব্যবহৃত হয়, তবে কমান্ড লাইনে ব্যবহারের ব্যাখ্যা দেয় এমন কিছু খুঁজে পেতে আমার সমস্যা হচ্ছে 2>&1
। উদাহরণ স্বরূপ:
curl http://www.google.com > /dev/null 2>&1 &
আমি জানি যে >
কমান্ড লাইনে আউটপুট পুনঃনির্দেশের জন্য সাইনটি ব্যবহৃত হয়, তবে কমান্ড লাইনে ব্যবহারের ব্যাখ্যা দেয় এমন কিছু খুঁজে পেতে আমার সমস্যা হচ্ছে 2>&1
। উদাহরণ স্বরূপ:
curl http://www.google.com > /dev/null 2>&1 &
উত্তর:
1
-এর মানে মান আউটপুট (stdout- এ)। 2
-এর মানে মান ত্রুটি (দ্বারা stderr)।
সুতরাং 2>&1
যেখানে কখনও কখনও স্ট্যান্ডার্ড আউটপুট পাশাপাশি পুনঃনির্দেশ করা হচ্ছে সেখানে স্ট্যান্ডার্ড ত্রুটি পাঠাতে বলে। যেহেতু এটি প্রেরণ করা /dev/null
হচ্ছে কোনও আউটপুট একেবারেই উপেক্ষা করার অনুরূপ।
0
(স্টিডিন), 1
(স্টাডআউট) এবং 2
(স্ট্ডার) আসলে ফাইল বর্ণনাকারী যা শেলের পুনর্নির্দেশের জন্য তাদের সামনে একটি অ্যাম্পারস্যান্ড প্রয়োজন। এটি এই ক্ষেত্রে ফাইল বর্ণনাকারীর সদৃশ করে যাতে কার্যকরভাবে দুটি প্রবাহের তথ্যের একত্র হয়ে যায়।
curl http://www.google.com 2>/dev/null
কমান্ড লাইনটি কীভাবে জানতে পারে যে এখানে "2" স্ট্যাডার বলতে বোঝানো হয়েছে এবং এটি যে দ্বিতীয় প্যারামিটারটি আমি কার্ল কমান্ডটিতে যাচ্ছি তা নয়?
stderr
সরাসরি থেকে /dev/null
পরিবর্তে সমস্ত আউটপুট প্রেরণ করবে । আপনি চেষ্টা করে বাস্তবে এটি দেখতে পারেন curl
, curl 1>/dev/null
এবং curl 2>/dev/null
কেবল আউটপুট পরিবর্তন দেখতে। আবার অ্যাম্পারস্যান্ড কেবলমাত্র ফাইল বিবরণকারীকে পুনঃনির্দেশ করার জন্য প্রয়োজন।
পান http://www.google.com
মধ্যে পটভূমি এবং বাতিল উভয় stdout
এবং stderr
।
curl http://www.google.com > /dev/null 2>&1 &
এটার মতই
curl http://www.google.com > /dev/null 2>/dev/null &
0
, 1
এবং 2
মান ফাইল প্রতিনিধিত্ব বর্ণনাকারী মধ্যে POSIX অপারেটিং সিস্টেম। একটি ফাইল বর্ণনাকারী হ'ল একটি ফাইল বা সকেটের (মূলত) সিস্টেম রেফারেন্স ।
সি তে একটি নতুন ফাইল বর্ণনাকারী তৈরি করা এর মতো দেখতে পারে:
fd = open("data.dat", O_RDONLY)
বেশিরভাগ ইউনিক্স সিস্টেমের আদেশগুলি কিছু ইনপুট নেয় এবং ফলাফলটিকে টার্মিনালে আউটপুট দেয়। curl
নির্দিষ্ট ইউআরএল ( গুগল ডট কম ) এ যা কিছু পাওয়া যাবে এবং ফলাফলটি প্রদর্শিত হবে stdout
।
যেমনটি আপনি বলেছেন <
এবং >
কোনও ফাইলের মতো একটি আদেশ থেকে আউটপুট পুনর্নির্দেশ করতে ব্যবহৃত হয়।
উদাহরণস্বরূপ, ইন ls > myfiles.txt
, ls
বর্তমান ডিরেক্টরিটির বিষয়বস্তু পেয়ে যায় এবং >
এর আউটপুটটিকে পুনর্নির্দেশ করে myfiles.txt
(যদি ফাইলটি উপস্থিত না থাকে তবে এটি তৈরি করা হয়েছে, অন্যথায় ওভাররাইট করা হয়েছে, তবে >>
পরিবর্তে >
আপনি ফাইলটিতে সংযোজন করার পরিবর্তে ব্যবহার করতে পারেন )। আপনি যদি উপরের কমান্ডটি চালনা করেন তবে লক্ষ্য করবেন যে টার্মিনালে কিছুই প্রদর্শিত হচ্ছে না। এর অর্থ সাধারণত ইউনিক্স সিস্টেমে সাফল্য। cat myfiles.txt
স্ক্রিনে ফাইলের সামগ্রী প্রদর্শন করতে এটি পরীক্ষা করতে ।
প্রথম অংশ > /dev/null
পুননির্দেশনা stdout
, যে curl
জন্য এর আউটপুট /dev/null
(এই এগিয়ে সম্পর্কে আরও) এবং 2>&1
পুননির্দেশনা stderr
করার stdout
(যা শুধু থেকে আপনাকে পুনঃনির্দেশিত করা হয় /dev/null
, যাতে সবকিছু পাঠানো হবে /dev/null
)।
বাম দিক 2>&1
আপনাকে জানায় কী পুনঃনির্দেশিত করা হবে এবং ডান দিকটি আপনাকে জানায় কোথায় । &
পার্থক্য ডান দিকে ব্যবহার করা হয় stdout (1)
বা stderr (2)
নামে ফাইল থেকে 1
বা 2
। সুতরাং, 2>1
একটি নতুন ফাইল তৈরি করা শেষ হবে (যদি এটি ইতিমধ্যে উপস্থিত না থাকে) 1
এবং stderr
ফলাফলটি সেখানে ফেলে দেয়।
/dev/null
এটি একটি খালি ফাইল, এতে লেখা সমস্ত কিছু ফেলে দেওয়ার জন্য ব্যবহৃত একটি প্রক্রিয়া। সুতরাং,
curl http://www.google.com > /dev/null
কার্যকরভাবে curl
এর আউটপুট দমন করা হয় ।
তবে কেন এখনও কিছু জিনিস টার্মিনালে প্রদর্শিত হচ্ছে ?. এই না curl
নিয়মিত আউটপুট এর কিন্তু পাঠানো ডেটা stderr
, অগ্রগতি ও ডায়গনিস্টিক তথ্য এবং শুধুমাত্র প্রদর্শনের জন্য এখানে ব্যবহৃত ত্রুটি ।
curl http://www.google.com > /dev/null 2>&1
উভয়ের curl
আউটপুট এবং curl
অগ্রগতির তথ্য উপেক্ষা করে । ফলাফলটি টার্মিনালে প্রদর্শিত হয় না।
&
শেষে আপনি একটি হিসাবে কমান্ড চালানোর জন্য শেল বলতে হয় কাজ মধ্যে পটভূমি । কমান্ডটি পর্দার আড়ালে অবিচ্ছিন্নভাবে চালিত হওয়ার সাথে সাথে প্রম্পটটি তত্ক্ষণাত্ ফিরে আসে। বর্তমান কাজগুলি দেখতে jobs
আপনার টার্মিনালে টাইপ করুন। নোট করুন এটি আপনার সিস্টেমে চলমান প্রক্রিয়াগুলির থেকে পৃথক । top
টার্মিনালে যারা টাইপ দেখতে ।
/dev/null
? আপনি কি curl
কমপক্ষে কোথাও ফল পেতে চান না ?
আমার অনুসরণ অনুসরণ হিসাবে বুঝতে:
আপনি যদি কেবলমাত্র পর্দায় কমান্ডের আউটপুট এবং ত্রুটির তথ্য পড়তে চান তবে কেবল লিখুন:
curl http://www.google.com
এবং কিছু সময় আপনি পরে পর্যালোচনার জন্য টার্মিনাল স্ক্রিনের পরিবর্তে কোনও ফাইলে আউটপুট তথ্য সংরক্ষণ করতে চান, তবে আপনি লিখতে পারেন:
curl http://www.google.com > logfile
তবে এইভাবে, স্ট্ডআর তথ্য বাদ দেওয়া হবে, যেহেতু >
কেবলমাত্র স্টডআউটকে পুনর্নির্দেশ করা হবে logfile
।
সুতরাং আপনি যদি কমান্ডটির ত্রুটি সম্পর্কিত তথ্য একবার কার্যকর করতে ব্যর্থ হন তবে আপনাকে StdOr এর সাহায্যে StdOr একত্রিত করতে হবে 2>&1
(যার অর্থ StdOr কে StdOut এ ভাঁজ করা উচিত), সুতরাং নিম্নলিখিত কমান্ড লাইনটি লিখিত হতে পারে:
curl http://www.google.com > logfile
2> & 1