শেল বৈশিষ্ট্যটির নাম `> (টি কপিআরআর.আর্ট.টেক্সট> & 2)`?


11

আমার লগফাইলে স্টডআউট এবং স্টার্ডার লগ করতে হবে তবে কেবলমাত্র স্ক্রিনে ত্রুটি বার্তাগুলি প্রদর্শিত হবে। আমি এটি দিয়ে এটি করতে পারি:

cp -rpv a/* b 1> copyLog.txt 2> >(tee copyError.txt >&2) 

যা আমি ওয়েবে কোথাও খুঁজে পেয়েছি।

আমি শুধু জানতে চাই যে এই >(tee copyError.txt >&2)জিনিসটি কীভাবে বলা হয়? আমি এর জন্য গুগল করতে পারি না, যেহেতু গুগল অ্যাঙ্গেল বন্ধনী এবং প্রথম বন্ধনীর মতো অক্ষর উপেক্ষা করে ..


ফাইল পুনঃনির্দেশ ( tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html )
কার্তিক

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

উত্তর:


11

থেকে man bash:

   Process Substitution
       Process substitution is supported  on  systems  that  support
       named  pipes  (FIFOs)  or  the  /dev/fd method of naming open
       files.  It takes the form of <(list) or >(list).  The process
       list  is  run with its input or output connected to a FIFO or
       some file in /dev/fd.  The name of this file is passed as  an
       argument  to  the current command as the result of the expan
       sion.  If the >(list) form is used, writing to the file  will
       provide  input  for  list.   If the <(list) form is used, the
       file passed as an argument should be read to obtain the  out
       put of list.

আপনি /নিজের অনুসন্ধান স্ট্রিং টিপুন এবং টাইপ করে ম্যানপেজগুলি অনুসন্ধান করতে পারেন , যা এই জাতীয় তথ্য সন্ধানের একটি ভাল উপায়। এটি অবশ্যই প্রয়োজন যে আপনি অবশ্যই জানেন যে কোন ম্যানপেজে অনুসন্ধান করতে হবে :)

আপনাকে (যদিও উদ্ধৃত করতে হবে, কারণ এটি অনুসন্ধানের সময় এর একটি বিশেষ অর্থ রয়েছে। ব্যাশ ম্যানপেজে প্রাসঙ্গিক বিভাগটি সন্ধান করতে টাইপ করুন />\(


আমি প্রচুর ব্যাশ করি, তাই আমি একজন লোককে ব্যাশ> বশমন.টেক্সট করেছি এবং কেবল এটি পড়তে বাধ্য করেছি। এখন, আমি আমার টেক্সট এডিটর-এর অন্য উইন্ডোতে bashman.txt লোড করতে পারি (কেবল পঠনযোগ্য) এবং অনুসন্ধান এবং অনুলিপি এবং আটকানোর জন্য সম্পাদকের সমস্ত সুবিধা ব্যবহার করতে পারি।
জো

8

>(tee copyError.txt >&2) আসলে কয়েকটি ভিন্ন বৈশিষ্ট্য:

  • >(...)একে 'প্রক্রিয়া প্রতিস্থাপন' বলা হয়। এটি একটি নামযুক্ত পাইপ ফাইল তৈরি করে /dev/fdএবং সেই ফাইলটিতে লিখিতকরণ বন্ধনীগুলির প্রক্রিয়াটিকে ইনপুট সরবরাহ করবে।

  • >: সাধারণভাবে এটিকে 'আউটপুট পুনর্নির্দেশ' বলা হয় এবং আপনাকে কোনও ফাইল বা প্রক্রিয়াতে স্ট্যান্ডার্ড আউটপুট ( >বা 1>) বা স্ট্যান্ডার্ড ত্রুটি ( 2>) প্রেরণ করতে দেয় । >&2আউটপুট ফেরৎ কিন্তু এই ক্ষেত্রে, আউটপুট teeমান ত্রুটি পাঠানো হয় (যে কী &2হয়, &1মান আউটপুট হয়)

  • ছাড়া >, বন্ধনী ( ()) একটি সাব-শেল শুরু করবে। বন্ধনীগুলিতে চলমান কমান্ডগুলি অন্য শেলকে ছড়িয়ে দেবে যা কেবলমাত্র ততক্ষণ থাকবে যতক্ষণ না সেই আদেশগুলি চলমান থাকে running আপনি যদি সাব-শেলটিতে ভেরিয়েবল ঘোষণা করেন তবে এটি কীভাবে কাজ করবে তা দেখতে পাবেন:

    $ foo='Tom';(foo='Dick'; echo "Sub: $foo"); echo "Orig: $foo"
    Sub: Dick
    Orig: Tom
    

    আপনি দেখতে পাচ্ছেন $fooযে সাবশেলের মধ্যে এটি সংজ্ঞায়িত হয়েছিল তা প্যারেন্ট শেলের মধ্যে সংজ্ঞায়িত থেকে পৃথক।


4
কোন >(...)একটি ফেরৎ নয়। >(...)ফাইলের নামে প্রসারিত হয়। আপনি যদি আউটপুটটিকে পুনর্নির্দেশ করতে চান > >(...)তবে আপনার প্রয়োজন তবে >(...)আরও সাধারণত ব্যবহৃত হয় যেখানে পুনঃনির্দেশগুলি ব্যবহার করা যায় না। ওপি'র কমান্ডটি traditionalতিহ্যবাহী পাইপ দিয়ে অর্জন করা যেতে পারে, সেখানে প্রক্রিয়া বিকল্পের প্রয়োজন নেই।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস আপনি যে সমাধানটি মনে রেখেছিলেন তা দেখে ভালো লাগবে
দিমিত্রি অ্যাভটনোমভ

3
@ ছহহ,cmd 2>&1 > output | tee err >&2
স্টাফেন চেজেলাস


এই উত্তরের প্রথমার্ধটি ভুল, বা কমপক্ষে অত্যন্ত বিভ্রান্তিকর; এটা সত্যি যে >আউটপুট-ফেরৎ বোঝাতে পারেন এবং যে ()একটি subshell বোঝাতে পারে, কিন্তু >(...)আসলে একটি একক, ঐকিক বৈশিষ্ট্য যা দ্বারা গঠিত নয় >এবং ()
রুখ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.