বাশ-এ কমান্ড আউটপুট কীভাবে আড়াল করা যায়


105

আমি আমার ব্যাশ স্ক্রিপ্টগুলি শেষ ব্যবহারকারীর জন্য আরও মার্জিত করতে চাই। বাশ কমান্ড কার্যকর করতে গিয়ে আমি কীভাবে আউটপুটটি আড়াল করব?

উদাহরণস্বরূপ, যখন বাশ কার্যকর করে

yum install nano

নীচে ব্যাশ কার্যকরকারী ব্যবহারকারীদের দেখানো হবে:

Loaded plugins: fastestmirror
base                                                     | 3.7 kB     00:00
base/primary_db                                          | 4.4 MB     00:03
extras                                                   | 3.4 kB     00:00
extras/primary_db                                        |  18 kB     00:00
updates                                                  | 3.4 kB     00:00
updates/primary_db                                       | 3.8 MB     00:02
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.0.9-7.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch              Version                Repository       Size
================================================================================
Installing:
 nano            x86_64            2.0.9-7.el6            base            436 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 436 k
Installed size: 1.5 M
Downloading Packages:
nano-2.0.9-7.el6.x86_64.rpm                              | 436 kB     00:00
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-4.el6.centos.10.x86_64 (@anaconda-CentOS-201303020151.x86_64/6.4)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : nano-2.0.9-7.el6.x86_64                                      1/1
  Verifying  : nano-2.0.9-7.el6.x86_64                                      1/1

Installed:
  nano.x86_64 0:2.0.9-7.el6

Complete!

এখন আমি এটি ব্যবহারকারীর কাছ থেকে আড়াল করতে এবং পরিবর্তে এটি প্রদর্শন করতে চাই:

    Installing nano ......

আমি এই কাজটি কীভাবে সম্পাদন করতে পারি? আমি অবশ্যই স্ক্রিপ্টটিকে আরও ব্যবহারকারী বান্ধব করে তুলতে সহায়তা করব। যদি কোনও ত্রুটি দেখা দেয় তবে এটি ব্যবহারকারীকে দেখানো উচিত।

কমান্ডগুলির একটি সেট কার্যকর করা অবস্থায় একই বার্তাটি কীভাবে প্রদর্শিত হবে তা আমি জানতে চাই।


4
echo "Installing nano ......"; yum install nano &> /dev/null
ব্যবহারকারী000001


উত্তর:


253

এটা ব্যবহার কর.

{
  /your/first/command
  /your/second/command
} &> /dev/null

ব্যাখ্যা

কমান্ডগুলি থেকে আউটপুট নির্মূল করতে, আপনার কাছে দুটি বিকল্প রয়েছে:

  • আউটপুট বর্ণনাকারী ফাইলটি বন্ধ করুন, যা এটিকে আর কোনও ইনপুট গ্রহণ করা থেকে বিরত রাখে। এটি দেখতে এরকম দেখাচ্ছে:

    your_command "Is anybody listening?" >&-
    

    সাধারণত, আউটপুট হয় বর্ণনাকারী 1 (স্টাডআউট) বা 2 (স্ট্যাডার) ফাইল করে। আপনি যদি কোনও ফাইল বর্ণনাকারী বন্ধ করে থাকেন তবে আপনাকে প্রতিটি সংখ্যাযুক্ত বর্ণনাকারীর জন্য এটি করতে হবে, কারণ &>(নীচে) একটি বিশেষ BASH বাক্য গঠন যা বেমানান >&-:

    /your/first/command >&- 2>&-
    

    অর্ডারটি নোট করতে সাবধান হন: >&- স্টডআউটটি বন্ধ করে দেয় , যা আপনি করতে চান; &>-স্টাডাউট এবং স্ট্ডারকে -(হাইফেন) নামের একটি ফাইলে পুনর্নির্দেশ করে যা আপনি যা করতে চান তা নয়। এটি প্রথমে দেখতে একই রকম হবে তবে পরবর্তীকর্মী আপনার কার্যনির্বাহী ডিরেক্টরিতে একটি স্ট্রে ফাইল তৈরি করে। এটি সহজেই স্মরণে রাখা যায়: >&2স্ট্যান্ডআউটকে ডেস্ক্রিপ্টর 2 (স্টার্ডার) -এ >&3পুনর্নির্দেশ করে, স্ট্যান্ডআউটকে ডেস্ক্রিপ্টর 3 এ >&-পুনঃনির্দেশ করে এবং স্টাডাউটকে একটি মৃত প্রান্তে পুনঃনির্দেশ করে (যেমন এটি স্টডআউট বন্ধ করে)।

    এছাড়াও সাবধান থাকুন যে কোনও কমান্ড কোনও বদ্ধ ফাইল বর্ণনাকারী বিশেষত ভালভাবে পরিচালনা করতে পারে না ("লেখার ত্রুটি: খারাপ ফাইল বর্ণনাকারী"), এ কারণেই এর থেকে আরও ভাল সমাধান হতে পারে ...

  • এতে আউটপুট পুনর্নির্দেশ করুন/dev/null , যা সমস্ত আউটপুট গ্রহণ করে এবং এর সাথে কিছুই করে না। দেখে মনে হচ্ছে:

    your_command "Hello?" > /dev/null
    

    কোনও ফাইলে আউটপুট পুনর্নির্দেশের জন্য, আপনি স্টডআউট এবং স্ট্ডার উভয়ই খুব সংক্ষিপ্তভাবে একই জায়গায় যেতে পারেন, তবে কেবল ব্যাশে:

    /your/first/command &> /dev/null
    

অবশেষে, একই সাথে কয়েকটি কমান্ডের জন্য একই কাজ করতে, পুরো জিনিসটি কোঁকড়া ধনুর্বন্ধনী মধ্যে ঘিরে। বাশ এটিকে আউটপুট ফাইল বর্ণনাকারীদের একত্রিত করে কমান্ডের একটি গোষ্ঠী হিসাবে বিবেচনা করে যাতে আপনি একবারে সমস্ত পুনঃনির্দেশ করতে পারেন। ( command1; command2; )সিনট্যাক্স ব্যবহার করে সাবসেলগুলির পরিবর্তে আপনি যদি পরিচিত হন তবে আপনি দেখতে পাবেন যে ধনুর্বন্ধনীগুলি কোনও পাইপে জড়িত না করা যদি না আপনি বন্ধনীগুলি সাব-শেল তৈরি করে না এবং এইভাবে আপনাকে অভ্যন্তরে পরিবর্তনশীল সেট করতে দেয় to

{
  /your/first/command
  /your/second/command
} &> /dev/null

আরও বিশদ, বিকল্পগুলি এবং সিনট্যাক্সের জন্য পুনর্নির্দেশগুলিতে বাশ ম্যানুয়ালটি দেখুন ।


হাই, আমি জানি এটি একটি পুরানো প্রশ্ন তবে শর্তসাপেক্ষে কি এটি করা যেতে পারে? আমি কি কিছু শর্তে আউটপুটটি আড়াল করতে চাই? আমি জানি আমি যদি একই অংশটির প্রতিলিপি করতে পারি তবে-অন্যথায় এর থেকে আরও ভাল উপায় আছে?
উসামা জাফর

@ উসামা জাফর আমি এমন একটি ভেরিয়েবল ( "শেল প্যারামিটার" ) সেট করে করব যা আপনি স্ক্রিপ্টের আগে /dev/nullবা /dev/stdout(বা /path/to/a/logfile) শর্তাধীন রেখেছিলেন এবং তারপরে (বা আপনি যে নামেই ডাকবেন ) ব্যবহার করে সেই গন্তব্যে পুনর্নির্দেশ করে &> $output_dest। আপনি যদি স্টাডাউট এবং স্টাডার একত্রিত করতে না চান তবে আপনি এগুলি আলাদাভাবে পুনর্নির্দেশ করতে পারেন > $output_dest 2> $errors_dest
জেফ বোমন 17

37

আপনি stdout / dev / null এ পুনঃনির্দেশ করতে পারেন।

yum install nano > /dev/null

অথবা আপনি স্টাডাউট এবং স্টাডার উভয়ই পুনর্নির্দেশ করতে পারেন

yum install nano &> /dev/null

তবে প্রোগ্রামটির যদি একটি শান্ত বিকল্প থাকে তবে এটি আরও ভাল।


23

একটি প্রক্রিয়ার সাধারণত পর্দার দুটি আউটপুট থাকে: স্টডআউট (স্ট্যান্ডার্ড আউট), এবং স্টেডার (স্ট্যান্ডার্ড ত্রুটি)।

সাধারণত তথ্যমূলক বার্তা যায় sdoutএবং ত্রুটি এবং সতর্কতা যায় stderr

আপনি stdoutকোনও আদেশ দিয়ে বন্ধ করতে পারেন

MyCommand >/dev/null

এবং করে বন্ধ করুন stderr:

MyCommand 2>/dev/null

যদি আপনি উভয়কেই ছাড়তে চান তবে আপনি এটি করতে পারেন:

MyCommand 2>&1 >/dev/null

এই 2>&1স্টাডারকে স্টাডাউটের মতো একই জায়গায় পাঠান।


8

আপনি আউটপুট পুনর্নির্দেশ করতে পারেন /dev/null। / Dev / নাল সম্পর্কিত আরও তথ্যের জন্য এই লিঙ্কটি পড়ুন

আপনি নীচের উপায়ে কমন্ডের আউটপুটটি আড়াল করতে পারেন:

echo -n "Installing nano ......"; yum install nano > /dev/null; echo " done."; 

এতে স্ট্যান্ডার্ড আউটপুট পুনর্নির্দেশ করুন /dev/nullতবে মানক ত্রুটি নয়। এটি ইনস্টলেশন চলাকালীন ঘটে যাওয়া ত্রুটিগুলি প্রদর্শন করবে, উদাহরণস্বরূপ, যদি yumপ্যাকেজটি খুঁজে না পাওয়া যায়।

echo -n "Installing nano ......"; yum install nano &> /dev/null; echo " done.";

যদিও এই কোডটি টার্মিনালে কিছুই দেখায় না কারণ স্ট্যান্ডার্ড ত্রুটি এবং স্ট্যান্ডার্ড আউটপুট উভয়ই পুনঃনির্দেশিত হয়েছে এবং এইভাবে বাতিল হয়ে যায় /dev/null


4
দুর্দান্ত শেয়ার .... ডুড আপনি কি আমাকে একই বার্তা আউটপুট করতে পারেন তা কেবলমাত্র একবার কমান্ডের সেট হিসাবে ব্যবহার করতে পারেন
user2650277


4

আউটপুট থেকে মুক্তি পেতে আপনার এই ক্ষেত্রে ব্যাশ ব্যবহার করা উচিত নয়। ইউমের একটি বিকল্প রয়েছে -qযা আউটপুটকে দমন করে।

আপনি অবশ্যই ব্যবহার করতে চাইবেন -y

echo "Installing nano..."
yum -y -q install nano

ইউমের জন্য সমস্ত বিকল্প দেখতে, ব্যবহার করুন man yum


ধন্যবাদ, আমি ধরে নিয়েছিলাম যে ইয়াম একটি দের জন্য এপট-ব্যবহারের সাথে ব্যবহার করা হয়েছে -কুইকিউরও রয়েছে। এটি আমি যা করছি তার জন্য সহায়ক ছিল।
হাইপারিয়ন

0
.SILENT:

আপনার স্ক্রিপ্টের শুরুতে কলোন ছাড়াই ".SائلNT:" টাইপ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.