আমি কিভাবে একটি ফাইল টার্মিনাল আউটপুট সংরক্ষণ করবেন?

আমি কিভাবে একটি ফাইল একটি কমান্ড আউটপুট সংরক্ষণ করবেন?

কোনও সফ্টওয়্যার ব্যবহার না করে কি কোনও উপায় আছে? আমি জানতে চাই কিভাবে.

হ্যাঁ এটা সম্ভব, শুধু আউটপুট পুনর্নির্দেশ (ওরফে stdout) একটি ফাইলে:

SomeCommand > SomeFile.txt  

অথবা আপনি যদি ডেটা যুক্ত করতে চান:

SomeCommand >> SomeFile.txt

আপনি যদি চান stderr পাশাপাশি এটি ব্যবহার করুন:

SomeCommand &> SomeFile.txt  

অথবা এই যোগ করতে:

SomeCommand &>> SomeFile.txt  

আপনি যদি উভয় পেতে চান stderr এবং আউটপুট কনসোল প্রদর্শিত এবং একটি ফাইলের মধ্যে এটি ব্যবহার করুন:

SomeCommand 2>&1 | tee SomeFile.txt

(যদি আপনি শুধুমাত্র আউটপুট চান, ড্রপ 2 উপরে)

একটি ফাইল একটি কমান্ড আউটপুট লিখতে, মূলত 10 সাধারণভাবে ব্যবহৃত উপায় আছে.

সংক্ষিপ্ত বিবরণ:

দয়া করে মনে রাখবেন যে n.e. সিনট্যাক্স কলামে অর্থ "বিদ্যমান নেই".
একটি উপায় আছে, কিন্তু এটি কলামের মধ্যে মাপসই করা খুব জটিল. আপনি এটি সম্পর্কে তালিকা বিভাগে একটি সহায়ক লিঙ্ক খুঁজে পেতে পারেন.

          || visible in terminal ||   visible in file   || existing  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   ==========++==========+==========++==========+==========++===========    >     ||    no    |   yes    ||   yes    |    no    || overwrite    >>    ||    no    |   yes    ||   yes    |    no    ||  append          ||          |          ||          |          ||   2>     ||   yes    |    no    ||    no    |   yes    || overwrite   2>>    ||   yes    |    no    ||    no    |   yes    ||  append          ||          |          ||          |          ||   &>     ||    no    |    no    ||   yes    |   yes    || overwrite   &>>    ||    no    |    no    ||   yes    |   yes    ||  append          ||          |          ||          |          || | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append          ||          |          ||          |          || n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append          ||          |          ||          |          |||& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

তালিকা:

  • command > output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিম ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হবে শুধুমাত্র, এটা টার্মিনালে দৃশ্যমান হবে না. ফাইল ইতিমধ্যে উপস্থিত থাকলে, এটা মুছে ফেলা হয়.

  • command >> output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিম ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হবে শুধুমাত্র, এটা টার্মিনালে দৃশ্যমান হবে না. ফাইল ইতিমধ্যে উপস্থিত থাকলে, নতুন তথ্য ফাইল শেষে যোগ করা হবে.

  • command 2> output.txt

    স্ট্যান্ডার্ড ত্রুটি স্ট্রিম ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হবে শুধুমাত্র, এটা টার্মিনালে দৃশ্যমান হবে না. ফাইল ইতিমধ্যে উপস্থিত থাকলে, এটা মুছে ফেলা হয়.

  • command 2>> output.txt

    স্ট্যান্ডার্ড ত্রুটি স্ট্রিম ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হবে শুধুমাত্র, এটা টার্মিনালে দৃশ্যমান হবে না. ফাইল ইতিমধ্যে উপস্থিত থাকলে, নতুন তথ্য ফাইল শেষে যোগ করা হবে.

  • command &> output.txt

    স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি প্রবাহ উভয় শুধুমাত্র ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হবে, কিছুই টার্মিনালে দৃশ্যমান হবে. ফাইল ইতিমধ্যে উপস্থিত থাকলে, এটা মুছে ফেলা হয়.

  • command &>> output.txt

    স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি প্রবাহ উভয় শুধুমাত্র ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হবে, কিছুই টার্মিনালে দৃশ্যমান হবে. ফাইল ইতিমধ্যে উপস্থিত থাকলে, নতুন তথ্য ফাইল শেষে যোগ করা হবে..

  • command | tee output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিম ফাইল কপি করা হবে, এটি এখনও টার্মিনালে দৃশ্যমান হবে. ফাইল ইতিমধ্যে উপস্থিত থাকলে, এটা মুছে ফেলা হয়.

  • command | tee -a output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিম ফাইল কপি করা হবে, এটি এখনও টার্মিনালে দৃশ্যমান হবে. ফাইল ইতিমধ্যে উপস্থিত থাকলে, নতুন তথ্য ফাইল শেষে যোগ করা হবে.

  • (*)

    বাশের কোনও শর্টহ্যান্ড সিনট্যাক্স নেই যা পাইপিংকে কেবল দ্বিতীয় কমান্ডে স্টেডারের অনুমতি দেয়, যার সাথে এখানে সংমিশ্রণে প্রয়োজন হবে tee আবার টেবিল সম্পূর্ণ করতে. আপনার যদি সত্যিই এর মতো কিছু প্রয়োজন হয় তবে দয়া করে দেখুন "কীভাবে স্টেডারের পাইপ করবেন, এবং স্টডআউট নয়?"স্ট্যাক ওভারফ্লো উপর স্ট্রিম সোয়াপিং বা প্রক্রিয়া প্রতিকল্পন ব্যবহার করে যেমন কাজ করা যেতে পারে কিভাবে কিছু উপায় জন্য.

  • command |& tee output.txt

    এখনও টার্মিনালে দৃশ্যমান হচ্ছে যখন স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি স্ট্রিম উভয় ফাইল কপি করা হবে. ফাইল ইতিমধ্যে উপস্থিত থাকলে, এটা মুছে ফেলা হয়.

  • command |& tee -a output.txt

    এখনও টার্মিনালে দৃশ্যমান হচ্ছে যখন স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি স্ট্রিম উভয় ফাইল কপি করা হবে. ফাইল ইতিমধ্যে উপস্থিত থাকলে, নতুন তথ্য ফাইল শেষে যোগ করা হবে.

আপনি ব্যবহার করতে পারেন tee একটি ফাইল আউটপুট পাঠাতে:

command | tee ~/outputfile.txt

একটি সামান্য পরিবর্তন পাশাপাশি স্টেডারকেও ধরবে:

command 2>&1 | tee ~/outputfile.txt

বা সামান্য খাটো এবং কম জটিল:

command |& tee ~/outputfile.txt

tee আপনি সক্ষম হতে চান দরকারী কমান্ড আউটপুট ক্যাপচার এটি লাইভ দেখার সময়.

আপনি কমান্ড আউটপুট একটি ফাইলে পুনর্নির্দেশ করতে পারেন:

your_command >/path/to/file

কমান্ড আউটপুটটিকে ওভাররাইট করার পরিবর্তে কোনও ফাইলে যুক্ত করতে, ব্যবহার করুন:

your_command >>/path/to/file

বিবেচনা করার জন্য একটি বর্ধন -

বিভিন্ন স্ক্রিপ্ট আউটপুটে রঙিন কোড ইনজেকশন দেবে যা আপনি আপনার লগ ফাইল বিশৃঙ্খলা করতে চান না.

এটি ঠিক করতে, আপনি প্রোগ্রামটি ব্যবহার করতে পারেন এসইডি এই কোডগুলো খুলে দিতে উদাহরণ:

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt

এখানে দুটি ভিন্ন প্রশ্ন আছে. প্রথম শিরোনাম হয়:

আমি কিভাবে একটি ফাইল টার্মিনাল আউটপুট সংরক্ষণ করবেন?

দ্বিতীয় প্রশ্ন শরীরের মধ্যে হয়:

আমি কিভাবে একটি ফাইল একটি কমান্ড আউটপুট সংরক্ষণ করবেন?

এখানে পোস্ট করা সমস্ত উত্তর দ্বিতীয় প্রশ্নের সমাধান করে তবে কোনওটিই প্রথম প্রশ্নের সমাধান করে না যার দুর্দান্ত উত্তর রয়েছে ইউনিক্স এবং লিনাক্স:

এই উত্তর নামক একটি সামান্য পরিচিত কমান্ড ব্যবহার করে script যা আপনি টাইপ না করা পর্যন্ত আপনার সমস্ত শেলের আউটপুট একটি পাঠ্য ফাইলে সংরক্ষণ করে exit. কমান্ড আউটপুট এখনও আপনার পর্দায় প্রদর্শিত হবে কিন্তু এছাড়াও টেক্সট ফাইল প্রদর্শিত হবে.

প্রক্রিয়া সহজ. ব্যবহার করুন:

$ script ~/outputfile.txtScript started, file is /home/rick/outputfile.txt$ command1$ command2$ command3$ exitexitScript done, file is /home/rick/outputfile.txt

তারপর কমান্ড আপনার রেকর্ড আউটপুট তাকান 1, 2 & বিশ্বকাপ; 3 সঙ্গে:

cat ~/outputfile.txt

এই অনুরূপ আগের উত্তর এর মধ্যে:

command |& tee ~/outputfile.txt
  • তবে আপনাকে ব্যবহার করতে হবে না |& tee ~/outputfile.txt প্রতিটি পরে commnd.
  • দ্য script কমান্ড পুনরায় লোড করার সুবিধা (বা অসুবিধা) যোগ করেছে ~/.bashrc যখন এটি শুরু হয়.
  • দ্য script কমান্ড প্রম্পট দেখায় ($PS1 অতঃপর তোমার নিকট সত্য সংবাদ এসে যাওয়ার পর যদি এই কাহিনী সম্পর্কে তোমার সাথে কেউ বিবাদ করে,
  • দ্য script কমান্ড পূর্ণ রঙ সব বিবরণ রেকর্ড.

উল্লিখিত সময়ের জন্য cron চাকরি ইত্যাদি আপনি ব্যাশ এক্সটেনশন এড়াতে চান. সমতুল্য পোসিক্স sh পুনঃনির্দেশ অপারেটর হয়

Bash          POSIX------------  --------------foo &> bar    foo >bar 2>&1foo &>> bar   foo >>bar 2>&1foo |& bar    foo 2>&1 | bar

আপনি লক্ষ্য করবেন যে পোসিক্স সুবিধাটি কিছু অর্থে সহজ এবং আরও সোজা. দ্য &> সিনট্যাক্স থেকে ধার করা হয়েছিল csh যা ইতিমধ্যে এটি একটি খারাপ ধারণা যে আপনি সন্তুষ্ট করা উচিত.

some_command | tee command.log এবং some_command > command.log তারা কমান্ড আউটপুট সংরক্ষণ না যে সমস্যা আছে command.log রিয়েল-টাইমে ফাইল.

সেই সমস্যাটি এড়াতে এবং কমান্ড আউটপুটটি রিয়েল-টাইমে সংরক্ষণ করতে, আপনি যুক্ত করতে পারেন unbuffer, যা সঙ্গে আসে expect প্যাকেজ.


উদাহরণ:

sudo apt-get install expectunbuffer some_command | tee command.logunbuffer some_command > command.log

অনুমান log.py ধারন করে:

import timeprint('testing')time.sleep(100) # sleeping for 100 seconds

আপনি চালাতে পারেন unbuffer python log.py | tee command.log অথবা unbuffer python log.py > command.log

আরো তথ্য: আমি কিভাবে রিয়েল-টাইমে একটি ফাইলে একটি কমান্ড আউটপুট সংরক্ষণ করতে পারি?

কমান্ডটি চালানোর সময় আপনি যদি ফাইলটিতে আউটপুট করতে চান:

script -c ./path/to/executable.bash -f log.txt