2> & -, 2> / dev / নাল, | &, &> / dev / নাল এবং> / দেব / নাল 2> এবং 1 এর মধ্যে পার্থক্য


191

শুধু পার্থক্য খুঁজছি

  • 2>&-
  • 2>/dev/null
  • |&
  • &>/dev/null
  • >/dev/null 2>&1

এবং সঙ্গে তাদের বহনযোগ্যতা non-Bourne shellsমত tcsh, mkshইত্যাদি


2
মনে রাখবেন যে, মিক্স যখন &>জিএনইউ বাশ সামঞ্জস্যের পক্ষে সমর্থন করে , এটি ব্যবহার না করার জন্য এটি দৃ strongly়ভাবে উত্সাহিত হয়েছিল, কারণ এটি পার্সিংয়ের ফলে বিদ্যমান পসিক্স স্ক্রিপ্টগুলির শব্দার্থভাঙ্গা ভেঙে যেতে পারে এবং এমএসএক্স ইতিমধ্যে পসিএক্স মোডে অক্ষম করে।
মীরাবিলোস

আমি এটাও দেখেছি ^ /dev/null?
বালুপটন

উত্তর:


241

পটভূমির জন্য:

  • একটি সংখ্যা 1 = স্ট্যান্ডার্ড আউট (যেমন STDOUT)
  • একটি সংখ্যা 2 = স্ট্যান্ডার্ড ত্রুটি (যেমন STDERR)
  • যদি একটি সংখ্যা স্পষ্টভাবে দেওয়া না হয়, তবে 1 নম্বরটি শেল (বাশ) দ্বারা ধরে নেওয়া হবে

প্রথমে এর কাজগুলি সামলানো যাক। রেফারেন্সের জন্য অ্যাডভান্স বাশ-স্ক্রিপ্টিং গাইড দেখুন

ক্রিয়াকলাপ

2>&-

এটির সাধারণ ফর্মটি হল M>&-, যেখানে "এম" একটি ফাইল বর্ণনাকারী নম্বর number এটি যে কোনও ফাইল ডেস্ক্রিপ্টারের রেফারেন্সযুক্ত, অর্থাৎ "এম" এর জন্য আউটপুট বন্ধ করবে ।

2>/dev/null

এটির সাধারণ ফর্মটি হল M>/dev/null, যেখানে "এম" একটি ফাইল বর্ণনাকারী নম্বর number এই ফাইলটি বর্ণনাকারী পুনর্চালনা করবে "এম" যাও, /dev/null

2>&1

এই এক সাধারণ ফর্ম M>&N, যেখানে "এম" & "N" মানে ফাইল বর্ণনাকারী নম্বর আছে। এটি ফাইল বর্ণনাকারী "এম" এবং "এন" কে একক স্ট্রিমের সাথে সংযুক্ত করে ines

|&

এটি কেবল একটি সংক্ষেপণ 2>&1 |। এটি বাশ 4 এ যুক্ত হয়েছিল।

&>/dev/null

এটি কেবল একটি সংক্ষেপণ >/dev/null 2>&1। এটি ফাইল বর্ণনাকারী 2 (এসটিডিআরআর) এবং বর্ণনাকারী 1 (এসটিডিআউট) তে পুনর্নির্দেশ করে /dev/null

>/dev/null

এটি কেবল একটি সংক্ষেপণ 1>/dev/null। এটি ফাইল বর্ণনাকারী 1 (STDOUT) এ পুনঃনির্দেশ করে /dev/null

নন-ব্যাশ, টিসিএসএস, ম্যাক্স ইত্যাদির বহনযোগ্য

আমি বাইরে অন্যান্য শাঁস অনেক মোকাবিলা না করে থাকেন cshএবং tcsh। বাশের পুনঃনির্দেশ অপারেটরগুলির তুলনায় সেই ২ জনের সাথে আমার অভিজ্ঞতা হ'ল বাশ সে ক্ষেত্রে সেরা in দেখুন tcsh শেল man পৃষ্ঠা আরো বিস্তারিত জানার জন্য।

আপনি যে কোনও আদেশ সম্পর্কে জিজ্ঞাসা করেছিলেন সেগুলির মধ্যে সরাসরি সিএসএস / টিসিএস সমর্থিত নয়। অনুরূপ ফাংশনগুলি তৈরি করতে আপনাকে বিভিন্ন সিনট্যাক্স ব্যবহার করতে হবে।


আমরা একটি বিজয়ী আছে। কিন্তু সেখানে কোন কর্মক্ষমতা পার্থক্য বা কিছু যেমন সাথে 2>&-বনাম 2>/dev/null(তুলনায় যে কিছু "দুর্বল" লিখিত প্রোগ্রাম undrestand না অন্যান্য 2>&-সঠিকভাবে)?
ডিট

3
পারফরম্যান্সের কোনও পার্থক্য থাকতে হবে না।
slm

5
&>bashশুরু থেকেই ছিল (এবং বোর্ন এবং পসিক্সের সামঞ্জস্যতা ভঙ্গ করেছে কারণ এর অর্থ সেখানে আলাদা কিছু, যদিও আঘাত হানার সম্ভাবনা কম)। >&এবং |&আসুন (t)csh(এবং এটি স্টাডারকে পুনঃনির্দেশ করার তাদের একমাত্র উপায়)। তারা zshশুরু থেকেই ছিল এবং কেবল সম্প্রতি যুক্ত হয়েছে bash। আরও rcভাল ডিজাইন করা অপারেটরগুলির জন্য দেখুন ।
স্টাফেন চ্যাজেলাস

1
আপডেট করুন: কর্মক্ষমতা সমস্যা সম্পর্কে, যে এখানে নিশ্চিত আছে: unix.stackexchange.com/questions/163955/...
Det

1
হাই @ এসএলএম, যোগাযোগের জন্য ধন্যবাদ। আমি খুশি যে আমার রেপো পরিবর্তন হয়নি (+2-2=0)। এখন, সংস্করণ অংশে, আমি খুব বেশি সম্পাদনা করি না, তবে এই ক্ষেত্রে আমি করব, কারণ এটি স্পষ্ট করে যে অপারেশন পরবর্তী ডেটা হবে N। আমি আপনাকে উত্তরটি পড়েছি এবং এটি সব দিক থেকে খুব ভাল। এই ছোট্ট অস্পষ্টতা আমাকে ভাবতে পেয়েছিল, এজন্য সংস্করণটি। তবে ঠিক আছে, নিখরচায় এটিকে যুক্ত করুন বা প্রত্যাখ্যান করুন, যেমনটি আপনি করবেন। আমি আশা করি আমি বিষয়টি ব্যাখ্যা করতে পারতাম। ভাল কাজগুলো করতে থাকো.
ডাঃ বেকো

11

এটি STDERR এবং STDOUT পুনর্নির্দেশের জন্য:

  • 2>/dev/null

    STDERR কে / dev / null এ পুনঃনির্দেশ করুন (কনসোলে প্রদর্শিত হতে বাধা দিন)

  • |&

    পাইপড কমান্ডের (সেন্টিমিডি 1 এবং সেমিডিডি 2) এসটিডিআরতে এসটিডিআরআর এসটিডিআউট পুনর্নির্দেশ করুন

  • &>/dev/null

    STDERR এবং STDOUT উভয়ই / dev / নালটিতে পুনঃনির্দেশ করুন (কনসোলটিতে কিছুই দেখায় না)

  • >/dev/null

    STDOUT কে / dev / নালটিতে পুনঃনির্দেশ করুন (কেবল কনসোলটিতে STDERR শো দেখায়)

  • 2>&-

    পুনর্নির্দেশের সাহায্যে ব্যবহৃত ফাইল বিবরণকারী বন্ধ করার জন্য

এগুলি বোর্ন শেলগুলির জন্য সমস্ত স্ট্যান্ডার্ড পুনঃনির্দেশ পদ্ধতি।


4
|&এবং পোর্টেবল &>/dev/nullহয় না
ক্রিস ডাউন

4

এটি নির্বাচিত উত্তরের একটি সংযোজন হিসাবে বিবেচনা করুন। আপনি জানতে চাইতে পারেন কোন ফর্মগুলি পসিক্স এবং কোনটি নয়।

দুটি পসিক্স ফর্ম জড়িত:

২.7.২ পুনঃনির্দেশ আউটপুট

পুনঃনির্দেশ আউটপুট জন্য দুটি সাধারণ ফর্ম্যাট:

[এন]> শব্দ

[এন]> | শব্দ

যেখানে nচ্ছিক এন ফাইল বর্ণনাকারী নম্বর উপস্থাপন করে। যদি নম্বরটি বাদ দেওয়া হয় তবে পুনঃনির্দেশটি স্ট্যান্ডার্ড আউটপুট (ফাইল বর্ণনাকারী 1) উল্লেখ করবে।

'>' ফর্ম্যাট ব্যবহার করে আউটপুট পুনর্নির্দেশ ব্যর্থ হবে যদি নোক্লোবার বিকল্পটি সেট করা থাকে (সেট-সি-এর বর্ণনা দেখুন) এবং শব্দের প্রসারিত নামযুক্ত ফাইলটি উপস্থিত রয়েছে এবং এটি একটি নিয়মিত ফাইল। অন্যথায়, '>' বা "> |" ব্যবহার করে পুনঃনির্দেশ ফর্ম্যাটগুলির দ্বারা ফাইলটির নাম প্রকাশিত শব্দের প্রসার থেকে ফলাফল তৈরি করা হবে এবং মনোনীত ফাইল বর্ণনাকারীর আউটপুট জন্য খোলা হবে বা যদি কোনও নির্দিষ্ট না করা থাকে তবে স্ট্যান্ডার্ড আউটপুট। যদি ফাইলটি বিদ্যমান না থাকে তবে এটি তৈরি করা হবে; অন্যথায়, এটি খোলার পরে একটি খালি ফাইল হতে হবে।

-

২.7..6 একটি আউটপুট ফাইল বর্ণনাকারীর সদৃশ

পুনঃনির্দেশ অপারেটর:

[এন]> & শব্দ

অন্য থেকে একটি আউটপুট ফাইল বর্ণনাকারী নকল করতে হবে, বা একটি বন্ধ হবে। শব্দটি যদি এক বা একাধিক সংখ্যার কাছে মূল্যায়ন করে তবে n দ্বারা বর্ণিত ফাইল বর্ণনাকারী, বা n নির্দিষ্ট না করা থাকলে স্ট্যান্ডার্ড আউটপুট শব্দের দ্বারা বর্ণিত ফাইল বর্ণনাকারীর অনুলিপি হিসাবে তৈরি করা হবে; শব্দে অঙ্কগুলি যদি আউটপুটটির জন্য ইতিমধ্যে খোলা কোনও ফাইল বর্ণনাকারীর প্রতিনিধিত্ব না করে তবে একটি পুনর্নির্দেশ ত্রুটির ফলস্বরূপ; শেল ত্রুটির ফলাফল দেখুন। শব্দটি যদি '-' এ মূল্যায়ন করে তবে ফাইল বর্ণনাকারী এন, বা n নির্দিষ্ট না করা থাকলে স্ট্যান্ডার্ড আউটপুট বন্ধ থাকে। খালি নয় এমন একটি ফাইল বিবরণকারী বন্ধ করার চেষ্টা করা ত্রুটি হিসাবে চিহ্নিত হবে না। শব্দটি যদি অন্য কোনও কিছুর কাছে মূল্যায়ন করে তবে আচরণটি অনির্দিষ্ট।

অতএব:

Function      POSIX-compat    POSIX 
2>&-          Yes             close 
2>/dev/null   Yes             redir
2>&1          Yes             dup 
|&            No              
&>/dev/null   No
>/dev/null    Yes             redir
>&/dev/null   ?               ?dup

শেষ লাইনটি মূল প্রশ্নে নয়, তবে এটি ব্যাশের অভিযোগ ছাড়াই কাজ করে। (এছাড়াও / dev / tty এর সাথে / dev / নাল প্রতিস্থাপনের সাথে কাজ করে)।


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