স্ক্রিপ্টে একই লাইনে স্ট্যাডার এবং স্টডআউটকে কীভাবে পুনর্নির্দেশ করবেন?


179

আমি এটুকু জানি:

$ command 2>> error

$ command 1>> output

আমি কি কোনও উপায়ে স্ট্যাডারকে ত্রুটি ফাইল এবং আউটপুট স্ট্যাডআউটকে একই লাইনে ব্যাশের আউটপুট ফাইলে আউটপুট দিতে পারি?

উত্তর:


292

এগুলি কেবল একটি লাইনে যুক্ত করুন command 2>> error 1>> output

তবে নোটটি >>ফাইলটিতে ইতিমধ্যে ডেটা থাকলে তা সংযোজনের জন্য রয়েছে note যেখানে >ফাইলটিতে বিদ্যমান ডেটা ওভাররাইট করা হবে।

সুতরাং, command 2> error 1> outputআপনি সংযোজন করতে না চাইলে।

শুধু সমাপ্তির দোহাই জন্য, আপনি লিখতে পারেন 1>শুধু >যেহেতু ডিফল্ট ফাইল বর্ণনাকারী আউটপুট। সুতরাং 1>এবং >একই জিনিস।

সুতরাং, command 2> error 1> outputহয়ে যায়,command 2> error > output


3
দুর্দান্ত উত্তর! আমি সত্যিই কিভাবে আপনার ব্যাখ্যা মত 1>হিসেবে লেখা যেতে পারে>
user784637

এটি কীভাবে পছন্দ থেকে আলাদা command &2>err.log, আমি মনে করি আমি সম্পূর্ণ বিভ্রান্তিকর সিন্ট্যাক্সিজ। (সমস্ত বাশ পাইপ-
ইসেমগুলির

4
@ থারস্মমনার tldp.org/LDP/abs/html/io-redirection.html আপনি যা খুঁজছেন তা আমি মনে করি। ফাইউইউ, দেখতে বেশটা command &2>err.logবৈধ নয় - সিনট্যাক্সের এম্পারস্যান্ডটি ফাইলের বর্ণনাকারী হিসাবে টার্গেট হিসাবে ব্যবহৃত হয়, উদাহরণস্বরূপ স্ট্যাডআউট থেকে স্টেডারকে command 1>&2পুনরুত্পাদন করা হবে।
ড্রেডপাইরেটশান

@ ড্রেডপাইরেটশাহন, দয়া করে ABS কে রেফারেন্স হিসাবে সংযুক্ত করবেন না - এটি মাঝে মাঝে পুরোপুরি ভুল ব্যবহার করে এবং খুব ঘন ঘন খারাপ অভ্যাসের উদাহরণ রয়েছে। wiki.bash-hackers.org/howto/redirection_tutorial একটি হল পর্যন্ত ফেরৎ আরও ভাল রেফারেন্স উৎস।
চার্লস ডাফি

27

এটা চেষ্টা কর:

your_command 2>stderr.log 1>stdout.log

অধিক তথ্য

সংখ্যাসমূহ 0মাধ্যমে 9হয় ফাইল বর্ণনাকারী ব্যাশ হবে। 0মানে স্ট্যান্ডার্ড ইনপুট, 1স্ট্যান্ডার্ড আউটপুট, 2স্ট্যান্ডার্ড ত্রুটি। 3মাধ্যমে 9অন্য কোনও অস্থায়ী ব্যবহারের জন্য অতিরিক্ত।

যে কোনও ফাইল ডেস্ক্রিপ্টর অপারেটরটি ব্যবহার করে কোনও ফাইল বা অন্য কোনও ফাইল ডেস্ক্রিপ্টারে পুনঃনির্দেশিত হতে পারে >। অপারেটরটি >>খালি তৈরির পরিবর্তে কোনও ফাইলে সংযোজন করতে ব্যবহার করতে পারেন ।

ব্যবহার:

file_descriptor > filename

file_descriptor > &file_descriptor

অনুগ্রহ করে উন্নত বাশ-স্ক্রিপ্টিং গাইড: অধ্যায় 20. I / O পুনঃনির্দেশ


থ্যাঙ্কস.আই এক ঘন্টা এটি অনুসন্ধান করে
শে


9

অথবা আপনি যদি একটি একক ফাইলে আউটপুট (স্টডআউট এবং স্টডার) মিশ্রণ করতে চান তবে আপনি ব্যবহার করতে পারেন:

command > merged-output.txt 2>&1

32
এটি প্রশ্নের উত্তর নয়।
ম্যাথিয়াস

লোকেরা কেন আউটপুটগুলিকে মার্জ করে বা আউটপুটগুলিকে মার্জ করার পরামর্শ দেয়?
নুরেটিন

@ নুরেটিন: সম্ভবত আপনার কাছে একটি স্ক্রিপ্ট লাইন রয়েছে যা একটি কমান্ড কার্যকর করে এবং সাথে সাথে আউটপুটটিকে একটি লগ ফাইলে সংরক্ষণ করে। প্রশ্নে থাকা কমান্ডটি কখনও কখনও ব্যর্থ হতে পারে তাই আপনি সে সম্পর্কে কোনও ত্রুটি সংরক্ষণ করতে চান তবে একই লগ ফাইলে।
স্ট্রিমোস্টারগুলি

@ স্ট্রিম স্টারস হ্যাঁ অবশ্যই আপনি ঠিক বলেছেন হয়তো কখনও কখনও লোকেরা যা চায়, আমি এই প্রশ্নের প্রসঙ্গে এমন মন্তব্য করছিলাম যিনি উত্তর খুঁজছিলেন এবং স্ট্যাকওভারফ্লো জুড়ে প্রচুর অপ্রাসঙ্গিক খুঁজে পেয়েছিলেন।
নুরেটিন

0

একাধিক কমান্ডের আউটপুট পুনঃনির্দেশিত করা যেতে পারে। এটি কমান্ড লাইনটির জন্য বা ব্যাশ স্ক্রিপ্টে সবচেয়ে কার্যকরভাবে কাজ করে। -sপাসওয়ার্ড পর্দায় প্রম্পট নির্দেশ।

হিয়ারব্লক সেন্টিমিডেস স্টাডাউট / স্টার্ডার পৃথক ফাইলগুলিতে প্রেরণ করা হয় এবং প্রদর্শন করার মতো কিছুই না nothing

sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF

হিয়ারব্লক সেন্টিমিডেস স্ট্যাডআউট / স্টডার একক ফাইল এবং ডিসপ্লেতে প্রেরণ করা হয়।

sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF

হিয়ারব্লক সেন্টিমিডেস / স্টার্ডার আলাদা আলাদা ফাইল এবং স্টাডআউটকে প্রদর্শন করার জন্য প্রেরণ করা হয়।

sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF

আপনি কে (হোয়ামি) এবং ব্যবহারকারী নাম ব্যবহারের উপর নির্ভর করে একটি পাসওয়ার্ড প্রয়োজন হতে পারে বা নাও হতে পারে।

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