আমি কিভাবে একটি ফাইল একটি কমান্ড আউটপুট সংরক্ষণ করবেন?
কোনও সফ্টওয়্যার ব্যবহার না করে কি কোনও উপায় আছে? আমি জানতে চাই কিভাবে.
আমি কিভাবে একটি ফাইল একটি কমান্ড আউটপুট সংরক্ষণ করবেন?
কোনও সফ্টওয়্যার ব্যবহার না করে কি কোনও উপায় আছে? আমি জানতে চাই কিভাবে.
হ্যাঁ এটা সম্ভব, শুধু আউটপুট পুনর্নির্দেশ (ওরফে 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