'2>> (কমান্ড) এর অর্থ বাশে পুনর্নির্দেশ


18

কিছুক্ষণ আগে আমি একটি স্ক্রিপ্ট তৈরি করেছি এবং আমি এর চারপাশে কিছু লগিং যুক্ত করেছি, তবে লগিংয়ের পুনঃনির্দেশটি কীভাবে কাজ করে তা আমি ভুলে গিয়েছিলাম :-(

এর সূচনাটি হ'ল:

#!/bin/bash

LOGFILE=/some/path/mylogfile

(
  # here go my commands which produce some stdout
  # and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )

আমি যখন স্ক্রিপ্টটি চালিত করি, এটি এতে কিছু মুদ্রণ করে না stdout, তবে যা যা প্রিন্ট করে stderr। লগফিল ${LOGFILE}স্টাডআউট এবং স্ট্ডার উভয়কেই ক্যাপচার করে।

আমি যখন স্ক্রিপ্টটি চালনা করি এবং আমার টার্মিনালে কোনও আউটপুট না থাকে, তখন আমি জানি যে সবকিছু ঠিক আছে। যদি কোনও আউটপুট থাকে তবে আমি জানি যে কিছু ভুল হয়েছে এবং সমস্যাটি কী তা জানতে আমি লগফাইলে চেক করতে পারি।

পুনঃনির্দেশের যে অংশটি এখন আমাকে ধাঁধা দেয় তা হ'ল সিনট্যাক্স: 2> >( some command )

সেখানে কি চলছে কেউ ব্যাখ্যা করতে পারেন?

উত্তর:


23

>(...)প্রক্রিয়া প্রতিস্থাপন বলা হয় । এটি "বহিরাগত" প্রোগ্রামটিকে "অভ্যন্তরীণ" প্রোগ্রামে লিখতে দেয় যেন এটি কোনও ফাইল।

এই ক্ষেত্রে এটি লেখা হচ্ছে stderrথেকে tee -a ${LOGFILE} >&2যা যোগ হবে LOGFILEতাহলে এছাড়াও লেখার সবকিছু পিছনে stderr

পুনঃনির্দেশ অপারেটর প্রক্রিয়া প্রতিস্থাপনের জন্য উভয় দিকে যেতে পারে, সুতরাং আপনি এটি লিখতে পারেন, উদাহরণস্বরূপ, বা <(...)এটি থেকে পড়তে ব্যবহার করতে পারেন, উদাহরণস্বরূপ, whileসাবস্কেলে চালনা না করে একটি লুপ করুন নিজেই।


5
বুঝেছি :-) আমি যদি চালানো echo <(date), আমার প্রতিস্থাপিত ফাইলের নাম দেয়: /dev/fd/63। যদি আমি চালানো cat <(date), আমার তারিখ প্রতিস্থাপিত ফাইলের বিষয়বস্তু দেয়, অর্থাত: Fri Nov 18 14:11:09 NZDT 2016
এনজেডডি

@ এনজেডডি, হ্যাঁ - তবে এটি কোনও নিয়মিত ফাইলের কল্পনা করবেন না - আপনি যা দেখছেন /devতা প্রক্রিয়াগুলির মধ্যে পাইপের একটি নাম।
টবি স্পিড

এই কৌশলটি কি ব্যবহৃত হয়েছে কারণ স্ট্যাডারকে পাইপ দেওয়া যায় না ( teeযদি, এই ক্ষেত্রে)?
বিলি

@ ব্লি হ্যাঁ, যেহেতু স্টাডাউটটি ইতিমধ্যে অন্য যে কোনও জায়গায় পুনঃনির্দেশিত করা হচ্ছে এটি স্ট্যাডার এবং স্ট্যাডআউট teeথেকে আলাদা রাখার সবচেয়ে সোজা উপায় বলে আমার কাছে মনে হয় ।
এরিক রেনোফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.