কোন কমান্ডের আউটপুট পুনর্নির্দেশ কিভাবে?


14

আমি আমার নেটওয়ার্ক স্থিতি পর্যবেক্ষণ করতে একটি সাধারণ স্ক্রিপ্ট লেখার চেষ্টা করছি, এর সমস্ত pingআউটপুট ছাড়াই :

ping -q -c 1 google.com > /dev/null && echo online || echo offline

সমস্যাটি হ'ল যখন আমি সংযুক্ত থাকি না, তখনও আমার আউটপুটটিতে ত্রুটি বার্তা পাই:

ping: unknown host google.com
offline

আমি কীভাবে এই ত্রুটি বার্তাটি আমার আউটপুট থেকে দূরে রাখতে পারি?

উত্তর:


28

আপনি যখন চালান:

ping -q -c 1 google.com > /dev/null && echo online || echo offline

আপনি মূলত কেবল স্ট্রিম 1 (অর্থাত stdout) এর আউটপুটটিকে পুনঃনির্দেশ করছেন /dev/null

আপনি যখন কোনও প্রোগ্রামের সাধারণ সম্পাদন দ্বারা উত্পাদিত আউটপুট পুনর্নির্দেশ করতে চান তখন এটি ঠিক আছে। যাইহোক, আপনি যদি সমস্ত ত্রুটি, সতর্কতা বা ব্যর্থতার কারণে আউটপুট পুনর্নির্দেশ করতে চান তবে আপনার stderrবা স্ট্যান্ডার্ড ত্রুটির স্ট্রিমটিতেও পুনর্নির্দেশ করা উচিত /dev/null

এটি করার একটি উপায় হ'ল আপনি যে স্ট্রিমটির পুনঃনির্দেশ অপারেটরে পুনঃনির্দেশ করতে চান তার সংখ্যার প্রিপেন্ডিং হ'ল >:Command 2> /dev/null

সুতরাং, আপনার আদেশটি দেখতে চাইবে:

ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline

তবে লক্ষ করুন যে আমরা ইতিমধ্যে একটি স্ট্রিম এ পুনঃনির্দেশিত করেছি /dev/null। একই পুনঃনির্দেশে কেবল পিগিব্যাক কেন নয়? বাশ আমাদের স্ট্রিম নম্বরটি নির্দিষ্ট করে যা করতে পুনর্নির্দেশ করতে পারে তা করতে অনুমতি দেয়। 2>&1

&পুনঃনির্দেশ অপারেটরের পরে চরিত্রটি লক্ষ্য করুন । এটি শেলটিকে বলে যে এরপরে যা প্রদর্শিত হবে তা ফাইলের নাম নয়, তবে আউটপুট প্রবাহের জন্য সনাক্তকারী।

ping -q -c 1 google.com > /dev/null 2>&1  echo online || echo offline

পুনঃনির্দেশ অপারেটরদের সম্পর্কে সতর্ক থাকুন, তাদের ক্রমটি অনেক গুরুত্বপূর্ণ। আপনি যদি ভুল ক্রমে পুনর্নির্দেশ করতে চান তবে আপনি অপ্রত্যাশিত ফলাফলের সাথে শেষ করবেন।

আপনি সম্পূর্ণ নীরবতা অর্জনের আরেকটি উপায় হ'ল এই শর্টকাটটি ব্যবহার করে সমস্ত আউটপুট স্ট্রিমগুলিকে পুনঃনির্দেশিত /dev/nullকরে: &>/dev/null(বা একটি লগ ফাইলে পুনর্নির্দেশ &>/path/to/file.log)।

অতএব, আপনার আদেশটি লিখুন:

ping -q -c 1 google.com &> /dev/null && echo online || echo offline

1
আহা &>/dev/nullএটা। তাত্ক্ষণিক সাহায্যের জন্য আপনাকে ধন্যবাদ!
অপেরালা

4
Be careful with the redirection operators, their order matters a lot., তবে আপনি আসলে ব্যবহারের উদাহরণ অন্তর্ভুক্ত করেননি2>&1
ইজকাটা

আমি যে যুক্ত করতে ভুলে গিয়েছিলাম! উদাহরণটি প্রতিফলিত করার জন্য সম্পাদিত উত্তর। আমার হাতে যখন আরও কিছুটা সময় থাকে, তখন আমি ব্যাখ্যা করব কীভাবে অর্ডারটিও কার্যকর হয়।
darnir

9

আপনাকে স্ট্যান্ডার্ড আউটপুট ( >বা 1>) এবং স্ট্যান্ডার্ড ত্রুটি ( 2>) উভয়ই পুনর্নির্দেশ করতে হবে :

ping -q -c 1 google.com > /dev/null 2>/dev/null && echo online || echo offline

বা, একজনকে অন্যটিতে পুনঃনির্দেশ করুন:

ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline

8
$ ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline

উদাহরণ

$ ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline
online

$ ping -q -c 1 googleadf.com > /dev/null 2>&1 && echo online || echo offline
offline

পিং গতি বাড়ছে

আপনার pingপ্রয়োগের উপর নির্ভর করে আপনি একক গণিতে সীমাবদ্ধ থাকতে পারেন-c 1 । কিছু বাস্তবায়ন আপনাকে এ থেকে নীচে যেতে দেবে, তবে আপনাকে অবশ্যই খারাপ চেহারা দেখার সময় শেষ হওয়ার জন্য অপেক্ষা করতে হবে। সুতরাং পরিবর্তে আপনি পরিবর্তে ব্যবহার pingকরতে চাইবেন fing

পিংয়ের ব্যর্থতা হ্রাস

$ date; ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:51:10 EST 2014
online
Tue Jan 28 13:51:10 EST 2014

$ date; ping -q -c 1 googleadf.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:51:15 EST 2014
offline
Tue Jan 28 13:51:25 EST 2014

ফিং ব্যর্থ অনেক দ্রুত

$ date; fing -p google.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:49:21 EST 2014
online
Tue Jan 28 13:49:22 EST 2014

$ date; fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:49:35 EST 2014
online
Tue Jan 28 13:49:38 EST 2014

1
আমি বরং timeসময় কমানোর সাথে ম্যানুয়ালি গণনা করার চেয়ে কমান্ডটি ব্যবহার করব date:time { fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; }
রুসলান

@ রুসলান - ধন্যবাদ, আমি এটি এইভাবে খ / সি এর আউটপুট চেয়েছিলাম date। উত্পাদিত আউটপুট পড়ার জন্য অন্য কারও পক্ষে এটি সহজ, আইএমও।
SLM
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.