পুনর্নির্দেশের আদেশ


29

কম্পিউটার কীভাবে এই কমান্ডটি পড়ে তা আমি বেশ বুঝতে পারি না don't

cat file1 file2 1> file.txt 2>&1

যদি আমি বুঝতে পারি, 2>&1কেবল স্ট্যান্ডার্ড ত্রুটিটিকে স্ট্যান্ডার্ড আউটপুটে পুনঃনির্দেশ করুন।

এই যুক্তি দিয়ে, আদেশটি আমাকে নিম্নরূপ পাঠ করেছে:

  1. সংযুক্ত ফাইল file1এবং file2

  2. stdoutএই অপারেশন থেকে প্রেরণ file.txt

  3. পাঠাতে stderrকরতে stdout

  4. শেষ?

কম্পিউটার কী করছে তা আমি নিশ্চিত নই। আমার যুক্তি অনুসারে, আদেশটি হওয়া উচিত

cat file1 file2 2>&1 > file.txt

তবে এটি সঠিক নয়।

উত্তর:


46

অ্যাসাইনমেন্টগুলি ব্যবহার করার বিষয়ে চিন্তা করা আমার পক্ষে সহজ মনে হয়েছে।

  • > মত =
  • & মত $

আপনি দিয়ে শুরু

1 = /dev/tty
2 = /dev/tty

তাহলে আপনার প্রথম উদাহরণ 1> file.txt 2>&1, আছে

1 = file.txt
2 = $1           # and currently $1 = file.txt

তোমাকে ছেড়ে চলে যাচ্ছি

1 = file.txt
2 = file.txt

আপনি যদি এটি অন্যভাবে করেন তবে আবার শুরু করুন

1 = /dev/tty
2 = /dev/tty

তারপর 2>&1 > file.txtনা

2 = $1           # and currently $1 = /dev/tty
1 = file.txt

সুতরাং শেষ ফলাফল হয়

1 = file.txt
2 = /dev/tty

এবং আপনি কেবল পুনঃনির্দেশিত করেছেন stdout, নয় stderr


আমি সাদৃশ্যটি সাদৃশ্যটি পেয়েছি তবে এটি বিভ্রান্তিকর - এর কী $দাঁড়াবে?
ইলিরান মালকা

মত কার্যভারে var=$othervar, $ডান দিকে পরিবর্তনশীল নাম প্রবর্তন করে। মত একটি ফেরৎ সালে 2>&1, &ডান দিকে ফাইল বর্ণনাকারী সংখ্যা প্রবর্তন করে। আমি বলছি আপনি এটি "ফাইল 2 সমান ফাইল 1 এর মতো" ভাবতে পারেন। (তবে সমান দুটি ধরণের রয়েছে: <যার অর্থ "পড়ার জন্য" এবং >অর্থ "লেখার জন্য"))
মাইকেল

12

পুনঃনির্দেশের ক্রমটি গুরুত্বপূর্ণ, এবং সেগুলি বাম থেকে ডানদিকে পড়া উচিত ।

উদাহরণস্বরূপ: command 2>&1 >somefileঅর্থ:

  1. পুনঃনির্দেশ stderr(যথা 2) এর বর্তমান গন্তব্যে stdout(এই মুহুর্তে, টার্মিনালটিতে)।
  2. তারপরে stdoutযেতে পরিবর্তন করুন somefile

সুতরাং এই ক্ষেত্রে, stderrটার্মিনালে stdoutযায় এবং একটি ফাইলে যায় যা আপনি সম্ভবত যা চান তা নয়।

অন্যদিকে, এর command >somefile 2>&1অর্থ:

  1. পুনঃনির্দেশ stdoutকরুনsomefile
  2. তারপরে ( ) stderrহিসাবে একই গন্তব্যে পুনর্নির্দেশ করুন ।stdoutsomefile

এই শেষ ক্ষেত্রে উভয় stderrএবং stdoutযান somefile, যা সম্ভবত আপনি চান কি।


4
cat file1 file2 1> file.txt 2>&1

>& প্রকৃত অর্থ সদৃশ, এটি ইতিমধ্যে খোলা ফাইলটিতে একটি নতুন ফাইল বর্ণনাকারী ম্যাপ করতে ডুপ সিস্টেম কল ব্যবহার করে।

সুতরাং, আপনাকে (বাশ আসলে) অবশ্যই প্রথমে নতুন স্টাডাউটটি খুলতে হবে "এবং স্টাডারকে বর্তমানে যেটি সেট করা আছে তাতে পুনর্নির্দেশ করুন।"


এটা সত্যিই দারুন! আমি এটা সম্পর্কে ভাবছিলাম &। আপনি কি সেই সিনট্যাক্সের কয়েকটি রেফারেন্স সংলগ্ন করতে পারেন, বা - আরও ভাল - উপরে বর্ণিত ডুপ সিস্টেমে কিছু ভাল সংস্থান আছে?
ইলিরান মালকা

1
'ম্যান ডুপ' ডকুমেন্টগুলি সিস্টেম কল করে।
এক্স টিয়ান

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