খেয়াল করা প্রথম জিনিস আপনার উদ্দেশ্য এবং শেল উপর নির্ভর করে উপায়ে দম্পতি আছে, তাই এই একাধিক দিক সামান্য বোঝার প্রয়োজন. অতিরিক্ত হিসাবে, নির্দিষ্ট কমান্ড যেমন time
এবং strace
ডিফল্টরূপে এসটিডিআরআর-তে আউটপুট লিখুন এবং সেই কমান্ডের নির্দিষ্ট পুনঃনির্দেশের কোনও পদ্ধতি সরবরাহ করতে পারে বা নাও দিতে পারে
পুনঃনির্দেশের পিছনে প্রাথমিক তত্ত্বটি হ ' ল শেল দ্বারা উত্পন্ন একটি প্রক্রিয়া (ধরে নেওয়া এটি একটি বাহ্যিক কমান্ড এবং শেল বিল্ট-ইন নয়) এর মাধ্যমে তৈরি করা হয়েছে fork()
এবং execve()
সিসকলস, এবং এর আগে অন্য সিসকল ঘটে dup2()
আগে প্রয়োজনীয় পুনঃনির্দেশ সম্পাদন করে execve()
ঘটে. যে অর্থে, পুনঃনির্দেশগুলি পিতামাতার শেল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়. দ্য m&>n
এবং m>n.txt
কিভাবে সঞ্চালন শেল অবহিত open()
এবং dup2()
সিসকাল (আরো দেখুন ইনপুট পুনঃনির্দেশ কীভাবে কাজ করে, পুনঃনির্দেশ এবং পাইপ মধ্যে পার্থক্য কি, এবং আউটপুট পুনঃনির্দেশ ঠিক মানে কি )
শেল পুনঃনির্দেশ
সর্বাধিক সাধারণ, মাধ্যমে হয় 2>
মধ্যে বোর্ন - এর মতো শেল, যেমন dash
(যা সংযুক্ত করা হয় /bin/sh
) এবং bash
; প্রথম ডিফল্ট এবং পজিক্স-অনুবর্তী শেল এবং অন্যান্য অধিকাংশ ব্যবহারকারীদের ইন্টারেক্টিভ সেশনের জন্য ব্যবহার কি. তারা সিনট্যাক্স এবং বৈশিষ্ট্যগুলিতে পৃথক, তবে ভাগ্যক্রমে আমাদের জন্য ত্রুটি স্ট্রিম পুনঃনির্দেশ একই কাজ করে (ব্যতীত &>
অ মান এক). সিএসএইচ এবং এর ডেরাইভেটিভগুলির ক্ষেত্রে, এসটিডিআরআর পুনঃনির্দেশ বেশ সেখানে কাজ করে না.
আসুন ফিরে আসা যাক 2>
অংশ. দুটি মূল বিষয় লক্ষ্য করা: >
মানে পুনঃনির্দেশ অপারেটর, যেখানে আমরা একটি ফাইল খুলি এবং 2
পূর্ণসংখ্যা এসটিডিআরআর ফাইল বর্ণনাকারীর জন্য দাঁড়িয়েছে; আসলে শেল ভাষার জন্য পসিক্স স্ট্যান্ডার্ড ঠিক এইভাবে পুনঃনির্দেশকে সংজ্ঞায়িত করে অধ্যায় 2.7:
[n]redir-op word
সহজ জন্য >
পুনঃনির্দেশ, দ্য 1
পূর্ণসংখ্যা জন্য বোঝানো হয় stdout
, অর্থাৎ echo Hello World > /dev/null
শুধু হিসাবে একই echo Hello World 1>/dev/null
. উল্লেখ্য, পূর্ণসংখ্যা বা পুনঃনির্দেশ অপারেটর উদ্ধৃত করা যাবে না যে, অন্যথায় শেল যেমন তাদের চিনতে না, এবং পরিবর্তে টেক্সট আক্ষরিক স্ট্রিং হিসাবে একইরূপে. ব্যবধান হিসাবে, এটি গুরুত্বপূর্ণ যে পূর্ণসংখ্যা পুনঃনির্দেশ অপারেটরের ঠিক পাশেই, তবে ফাইলটি হয় পুনঃনির্দেশ অপারেটরের পাশে হতে পারে বা না, অর্থাত্ command 2>/dev/null
এবং command 2> /dev/null
ঠিক কাজ করবে.
শেলের সাধারণ কমান্ডের জন্য কিছুটা সরলীকৃত সিনট্যাক্স হবে
command [arg1] [arg2] 2> /dev/null
এখানে কৌতুক ফেরৎ যে কোন জায়গায় প্রদর্শিত করতে পারেন. যে উভয় 2> command [arg1]
এবং command 2> [arg1]
বৈধ. এর জন্য নোট করুন bash
শেল, সেখানে বিদ্যমান &>
একই সময়ে উভয় এসটিডিআউট এবং এসটিডিআরআর স্ট্রিমগুলি পুনঃনির্দেশ করার উপায়, তবে আবার-এটি ব্যাশ নির্দিষ্ট এবং আপনি যদি স্ক্রিপ্টগুলির বহনযোগ্যতার জন্য চেষ্টা করছেন তবে এটি কার্যকর নাও হতে পারে আরও দেখুন উবুন্টু উইকি এবং >>এবং 2 এবং এএমপি; 1 এর মধ্যে পার্থক্য কী.
নোট: দ্য >
পুনঃনির্দেশ অপারেটর ট্রানসেটস একটি ফাইল এবং ফাইল উপস্থিত থাকলে, এটি মুছে ফেলা হয়. দ্য 2>>
যোগ করার জন্য ব্যবহার করা যেতে পারে stderr
ফাইল করতে.
আপনি যদি খেয়াল করতে পারেন, >
একক কমান্ডের জন্য বোঝানো হয়. স্ক্রিপ্টগুলির জন্য, আমরা বাইরে থেকে পুরো স্ক্রিপ্টের এসটিডিআরআর স্ট্রিমটি পুনর্নির্দেশ করতে পারি myscript.sh 2> /dev/null
অথবা আমরা ব্যবহার করতে পারেন এক্সেক বিল্ট-ইন. এক্সিকিউট বিল্ট ইন ইন্টারেক্টিভ বা স্ক্রিপ্ট মাধ্যমে কিনা, তাই কথা বলতে, পুরো শেল সেশনের জন্য স্ট্রিম বৈদ্যুতিক তার লাগানো ক্ষমতা আছে. এর মতো কিছু
#!/bin/shexec 2> ./my_log_file.txtstat /etc/non_existing_file
এই উদাহরণে, লগ ফাইলটি দেখানো উচিত stat: cannot stat '/etc/non_existing_file': No such file or directory
.
তবুও অন্য উপায় ফাংশন মাধ্যমে হয়. এএস সিন্ডারেলা তার উত্তরে উল্লিখিত, আমরা ইতিমধ্যে সংযুক্ত পুনঃনির্দেশ সহ ফাংশন ঘোষণা লিখতে পারি, এটাই
some_function(){ command1 command2} 2> my_log_file.txt
কমান্ড একচেটিয়াভাবে স্টডারারকে লেখা
কমান্ড যেমন time
এবং strace
তাদের আউটপুট লিখুন এসটিডিআরআর ডিফল্টরূপে. এর ক্ষেত্রে time
কমান্ড, একমাত্র কার্যকর বিকল্প হ 'ল পুরো কমান্ডের আউটপুট পুনর্নির্দেশ করা , এটি হ' ল
time echo foo 2>&1 > file.txt
বিকল্পভাবে, যদি আপনি আউটপুট আলাদা করতে চান তবে সিঙ্ক্রোনাস তালিকা বা সাবশেলটি পুনঃনির্দেশিত করা যেতে পারে ( যেমন দেখানো হয়েছে সম্পর্কিত পোস্ট ):
{ time sleep 1 2> sleep.stderr ; } 2> time.txt
অন্যান্য আদেশ, যেমন strace
অথবা dialog
এসটিডিআরআর পুনঃনির্দেশ করার উপায় সরবরাহ করুন strace
আছে -o <filename.txt>
আউটপুট লেখা উচিত যেখানে ফাইলের নাম উল্লেখ করতে পারবেন, যা বিকল্প. প্রতিটি উপ-প্রসেসের জন্য একটি পাঠ্য ফাইল লেখার জন্য একটি বিকল্প রয়েছে যা strace
দেখেন. দ্য dialog
কমান্ড পাঠ্য ব্যবহারকারী ইন্টারফেসটি স্টেডআউটে লিখেছেন তবে আউটপুট স্টডারারে, তাই যাতে পরিবর্তনশীল তার আউটপুট সংরক্ষণ করুন (কারণ var=$(...)
এবং পাইপলাইনগুলি কেবল এসটিডিআরআর গ্রহণ করে) আমাদের ফাইল বর্ণনাকারীদের অদলবদল করতে হবে
result=$(dialog --inputbox test 0 0 2>&1 1>/dev/tty);
কিন্তু উপরন্তু, আছে --output-fd
পতাকা, যা আমরা ব্যবহার করতে পারেন. এছাড়া নামে পাইপ পদ্ধতি. আমি লিঙ্ক করা পোস্টটি পড়ার পরামর্শ দিচ্ছি dialog
কি ঘটছে তার পুঙ্খানুপুঙ্খ বিবরণের জন্য কমান্ড.