আউটপুট পুনঃনির্দেশের ঠিক কী বোঝায়?


19

আমি স্টাডারকে পুনঃনির্দেশ করার মতো command 1> outবা তার সাথে 2>&1স্টাফগুলি দেখতে পাই তবে মাঝে মাঝে আমি &>নিজে থেকেও দেখতে পাই ইত্যাদি etc.

বোঝার সর্বোত্তম উপায় কী &এবং এর সঠিক অর্থ কী?

উত্তর:


26

&মধ্যে 2>&1সহজভাবে বলছেন যে সংখ্যা 1একটি ফাইল বর্ণনাকারী এবং একটি ফাইল নাম। এই ক্ষেত্রে standard output file descriptor

আপনি যদি ব্যবহার করেন , তবে এটির 2>1নামক কোনও ফাইলে ত্রুটিগুলি পুনর্নির্দেশ করবে 1তবে আপনি যদি ব্যবহার করেন 2>&1তবে এটি এটিতে প্রেরণ করবে standard output stream

এটি &>উভয় standard outputএবং standard errorকোথাও পাঠান বলে । উদাহরণস্বরূপ ls <non-existent_file> &> out.file,। এটি একটি উদাহরণ দিয়ে বর্ণনা করি।

সেটআপ:

  1. kokoনিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল তৈরি করুন :

    #!bin/bash
    
    ls j1
    echo "koko2"
    
  2. এটি সম্পাদনযোগ্য করুন: chmod u+x koko

  3. এখন নোট করুন যে j1অস্তিত্ব নেই

  4. এখন চালান ./koko &> output

  5. চালাও cat outputএবং আপনি দেখতে পাবেন

    ls: cannot access 'j1': No such file or directory
    koko2
    

, standard error( ls: cannot access 'j1': No such file or directory) এবং standard output( koko2) উভয়ই ফাইলে প্রেরণ করা হয়েছিল output

এখন আবার এটি চালান তবে এবার ভালো লেগেছে:

./koko > output

করুন cat outputএবং আপনি কেবল এর koko2মত দেখতে পাবেন । ls j1কমান্ড থেকে ত্রুটি আউটপুট না । এটি আপনাকে পাঠানো হবে standard errorযা আপনি আপনার টার্মিনালে দেখবেন।

গুরুত্বপূর্ণ নোটটি @ বাইট কমান্ডারকে ধন্যবাদ:

নোট করুন যে command >file 2>&1পুনর্নির্দেশের ক্রমটি গুরুত্বপূর্ণ। আপনি যদি command 2>&1 >fileপরিবর্তে লিখেন (যা সাধারণত আপনি যা চান তা নয়), এটি প্রথমে কমান্ডের stdoutফাইলটি পুনর্নির্দেশ করবে এবং তারপরে কমান্ডটিকে stderrতার এখন অব্যবহৃত অবস্থায় পুনঃনির্দেশিত করবে stdout, সুতরাং এটি টার্মিনালে প্রদর্শিত হবে এবং আপনি এটিটি পাইপ করতে বা পুনঃনির্দেশ করতে পারবেন আবার, তবে এটি ফাইলটিতে লেখা হবে না।


2
কি &>মানে?
এজেজে

1
নোট করুন যে command >file 2>&1পুনর্নির্দেশগুলির ক্রমে গুরুত্বপূর্ণ। আপনি যদি command 2>&1 >fileপরিবর্তে লিখেন (যা সাধারণত যা চান তা নয়) তবে এটি প্রথমে কমান্ডের স্টডআউটটি ফাইলে পুনর্নির্দেশ করবে এবং এরপরে কমান্ডের স্ট্ডারকে তার এখন অব্যবহৃত স্টাডাউটে পুনর্নির্দেশ করবে, সুতরাং এটি টার্মিনালে প্রদর্শিত হবে এবং আপনি এটি পাইপ করতে পারেন বা এটি পুনর্নির্দেশ করুন, তবে এটি ফাইলটিতে লেখা হবে না।
বাইট কমান্ডার

2
"এটি আপনাকে পাঠানো হবে standard outputযা আপনি আপনার টার্মিনালে দেখবেন" " এই "যাও" করা উচিত নয় standard error?
ফ্রে্রুগি 8787

1
হ্যাঁ @ ফ্রেগ্রি 87 আপনার ডান সংশোধন করেছেন
জর্জ উদোসেন

1
@ জর্জি ওয়াও, আপনি দ্রুত ছিলেন;) ভাল কাজ
ফ্রেগুই 87

5

2
আইআইআরসি &> FILEকেবল বাশের জন্য নির্দিষ্ট যেখানে >FILE 2>&1আরও বেশি সংখ্যক শেল বোঝা যায়।
বাইট কমান্ডার

@ বাইটকম্যান্ডার, ওহ, আমি জানতাম না বাশের কাছে এমন শর্টহ্যান্ড ছিল ... আমি সবসময় 2> & 1 ব্যবহার করেছি।
psusi

1

[n]>&wordবলা হয় অনুরূপ আউটপুট ফাইল বর্ণনাকারী (দেখুন অধ্যায় 2.7.6 POSIX শেল ভাষা স্ট্যান্ডার্ড)। এই বিশেষ আচরণ সহ শেল, বোর্ন মত এর বৈশিষ্ট্য ksh, dashএবং bash; আসলে, স্ট্যান্ডার্ডটি বোর্ন শেল এবং ksh। মধ্যে খুঁজছেন tcsh শেল এবং csh এর মূল ম্যানুয়াল, তারা দৃশ্যত যেকোনো ফাইল বর্ণনাকারী অনুরূপ ক্ষমতা প্রদান করবেন না, বিবরণ থেকে অবশ্য >&, এই আচরণ করবে &>মধ্যে bash(যে, পুনঃনির্দেশ ত্রুটি এবং ফাইলে স্বাভাবিক আউটপুট)।

উবুন্টু সহ সিস্টেমগুলির মতো * নিক্সে, আপনি প্রায়শই শুনতে পান যে সবকিছু ফাইল, বা একটি ফাইল বিবরণকারী । স্ট্যান্ডার্ড আউটপুটটি ধ্রুব ফাইল ডেস্ক্রিপ্টর 1 এবং স্ট্যান্ডার্ড ত্রুটি ফাইল ডেস্ক্রিপ্টর 2 হয়। সুতরাং, > FILE 2>&1প্রযুক্তিগতভাবে ফাইল ডেস্ক্রিপ্টারে 2 ডুপ্লিকেট ফাইল বর্ণনাকারী 2 বোঝানো হয়। এই উত্তরের অন্য কথায় :

2> & 1 শেলটিকে একটি ফাইল বর্ণনাকারী 2 দেওয়ার জন্য শেলকে বলে যা ডেস্ক্রিপ্ট 1 এর সদৃশ। (যেমন স্ট্যাডার এবং স্টাডআউট পয়েন্ট একই এফডি)।

এখানে মূল কীটি হ'ল ডেস্ক্রিপ্ট 1 টি প্রথমে সেট করতে হবে। শেল প্রসেস পুনঃনির্দেশগুলি সঠিক অনুক্রমে বামে কারণ, command >FILE 2>&1বৈদ্যুতিক তার লাগানো stdout- এ শেল বলে জন্য commandঢোকা FILEপ্রথম, এবং শুধুমাত্র তারপর বর্ণনাকারী 2 1 কপি, যে হয় 1 এবং 2 একই অবস্থানে বিন্দু হতে পারে - FILE

এটি অবশ্যই স্ট্যান্ডার্ড ত্রুটি এবং স্ট্যান্ডার্ড আউটপুট ছাড়িয়ে যায়। হিসাবে এই উত্তরে প্রদর্শন করুন , করে3&>2

... আপনি ফাইললিপি 3 তে নকল করুন (ডুপ 2) ফাইলড্রিপিটার 3-তে, সম্ভবত ইতিমধ্যে ফাইলডেস্কিটার 3 বন্ধ থাকলে

অনেকের মধ্যে ফাইল বর্ণনাকারীদের হেরফেরের উদাহরণ হ'ল dialogকমান্ডের আউটপুটটি ভেরিয়েবলের মধ্যে ক্যাপচার করা হবে

এটি &>নির্দিষ্ট করার জন্যও লক্ষণীয় bash। এতে zshএকই আচরণ করে তবে ডকুমেন্টেশন অনুসারে, "... মাল্টোসের উপস্থিতিতে '> শব্দ 2> & 1' এর মতো প্রভাব থাকে না"। পসিক্স অনুবর্তীতে /bin/sh, এটি ব্যাকগ্রাউন্ডে কমান্ড স্থাপনের সাথে নিয়মিত পুনঃনির্দেশ হিসাবে বিবেচিত হবে। এটি আরও দেখুন, এমন কোনও শ কোড আছে যা সিনট্যাক্টিক্যালি বৈধ বাশ কোড নয়?

আরো দেখুন:

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