উত্তর:
দুর্ভাগ্যক্রমে, stderr
কেবলমাত্র ত্রুটি আউটপুট জন্য ব্যবহৃত অনুমানটি সবসময় সঠিক হয় না। বরং, stderr
প্রায়শই যেকোন এবং সমস্ত ইন্টারেক্টিভ আউটপুট এবং ডায়াগনস্টিক্সের জন্য ব্যবহৃত হয় , অর্থাৎ ব্যবহারকারী ইন্টারেক্টিভ প্রম্পট 1 এ পড়ার উদ্দেশ্যে তৈরি আউটপুট । wget
এবং dd
সুপরিচিত উদাহরণ।
কিছু কমান্ড অ-ত্রুটিযুক্ত আউটপুট দমন করতে একটি পতাকা (যেমন -quiet
বা -silent
) সরবরাহ করবে - তাদের ম্যান পেজগুলি পড়ুন কিনা তা দেখতে।
আরও একটি কনভেনশন যা প্রায়শই অধিষ্ঠিত হয় সেটি হ'ল প্রস্থান কোড : একটি প্রোগ্রাম যখন প্রস্থান হয় তখন একটি প্রস্থান কোড ফেরত দেয়। সাধারণত 2 , একটি প্রস্থান কোড 0
সাফল্যের ইঙ্গিত দেয় এবং অন্য কোনও প্রস্থান কোড একটি ত্রুটি নির্দেশ করে।
এর সাথে bash
, আপনি $?
ভেরিয়েবল থেকে শেষ কমান্ডের প্রস্থান কোড পেতে পারেন । ইন fish
, $status
ভেরিয়েবল ব্যবহার করুন । আপনি stderr
একটি অস্থায়ী ফাইলে পাইপ করতে পারেন এবং কোনও ত্রুটি দেখা দিলে কেবল এটি মুদ্রণ করতে পারেন। উদাহরণস্বরূপ ( fish
):
command 2>/tmp/outputbuffer
if $status
cat /tmp/outputbuffer
rm /tmp/outputbuffer
আপনি কিছু শর্টকাটও ব্যবহার করতে পারেন, যদি আপনি কমান্ডগুলি শৃঙ্খলাবদ্ধ না হন:
if command 2>/tmp/outputbuffer
cat /tmp/outputbuffer
rm /tmp/outputbuffer
বা:
command 2>/tmp/outputbuffer; or cat /tmp/outputbuffer; rm /tmp/outputbuffer;
আপনি stdout
একই বাফারটি পাইপ করেও ব্যবহার করতে পারেন 2>&1 >/tmp/outputbuffer
।
(দ্রষ্টব্য: আমি আসলে জানি না fish
, সুতরাং আমি এর নথিতে যা পাই তা ধারণার সাথে আমি খাপ খাইচ্ছি। বাক্য গঠনটি কিছুটা ভুল হতে পারে Also এছাড়াও, আপনি mktemp
একটি অনন্য অস্থায়ী ফাইল তৈরি করতে ব্যবহার করতে পারেন - এটি চালান এবং রেকর্ডটি রেকর্ড করুন একটি চলক ফাইলের নাম।)
যদি আপনাকে একইসাথে ইন্টারেক্টিভভাবে ব্যবহার করা শেলের পটভূমিতে পুরো জিনিসটি চালানোর দরকার হয় তবে আপনি আউটপুট-আড়াল করতে এবং স্ক্রিপ্টটিকে স্ট্যান্ডার্ড কৌশলগুলি সহ পরিচালনা করার জন্য একটি স্ক্রিপ্ট লেখার চেয়ে ভাল ( fish
)। হেক, আপনি নিম্নলিখিত ফাংশন এর মতো কিছু রাখতে পারেন ~/.config/fish/config.fish
:
function run-silent
set temp (mktemp)
if $argv 2>&1 >$temp
cat $temp
rm $temp
end
সাথে কল করুন run-silent somecommand &
(যেখানে পিছনের পিছনে &
এটি পশ্চাদপটে চালিত হয়)
দ্রষ্টব্য যে এটি আসল প্রস্থান কোডটি গ্রাস করবে stdout
এবং stderr
ব্যর্থতার ক্ষেত্রে উভয়ই ডাম্প করে দেবে । আপনি এটি প্রয়োজনীয় হিসাবে কাস্টমাইজ করতে পারেন।
1 ত্রুটি আউটপুট প্রদর্শিত হবে না এমন গ্যারান্টি এমনকি নেই stdout
- কিছু প্রোগ্রাম সেখানে সমস্ত আউটপুট ডাম্প করে দেবে!
2 দুর্ভাগ্যক্রমে, এটি এখনও সর্বদা ক্ষেত্রে হয় না - প্রস্থান কোডটি প্রোগ্রাম দ্বারা সম্পূর্ণরূপে নিয়ন্ত্রিত হয় এবং কিছু শূন্য-বহির্গমন প্রস্থান সহ কিছু সাফল্যের শর্তাদি নির্দেশ করে। আবার, ম্যানুয়ালটি পরীক্ষা করুন।
ইউনিক্স ইউটিলিটিগুলিতে সাধারণ বার্তা প্রেরণ করে stdout
stderr
এটিকে এবং ত্রুটি বার্তাগুলি প্রেরণ করে , সুতরাং আমরা যদি কেবল ত্রুটি বার্তাগুলি দেখতে চাই তবে এটি দমন করার পক্ষে যথেষ্ট হবে stdout
সুতরাং কেবল stderr
কনসোলে আউটপুট পাওয়া যায়।
এটি করার উপায় (উভয় ক্ষেত্রে) bash
এবংfish
) >/dev/null
কমান্ডের সাথে যুক্ত করা। এই পাইপগুলি অকার্যকর হয়ে যায় না, তবে স্ট্ডার (আপনার ত্রুটির বার্তাগুলি সহ) এখনও কনসোলে আসে।
উদাহরণস্বরূপ:
আদেশ echo 1 >/dev/null
কিছুই প্রিন্ট করে না, কারণ স্বাভাবিক stdout
আউটপুট চাপা থাকে, এবং স্টাডারকে কিছুই লেখা হয় নি।
কমান্ডটি man doesnotexist >/dev/null
একটি ত্রুটি বার্তা প্রিন্ট করে, কারণ এতে man
ত্রুটি বার্তাটি লিখে দেয় stderr
।