কমান্ডের আউটপুট আমি কীভাবে সংরক্ষণ করব?
কোনও সফটওয়্যার ব্যবহার না করে কি উপায় আছে? আমি কিভাবে জানতে চাই।
কমান্ডের আউটপুট আমি কীভাবে সংরক্ষণ করব?
কোনও সফটওয়্যার ব্যবহার না করে কি উপায় আছে? আমি কিভাবে জানতে চাই।
উত্তর:
হ্যাঁ এটি সম্ভব, কেবলমাত্র একটি ফাইলে আউটপুট পুনর্নির্দেশ করুন:
SomeCommand > SomeFile.txt
অথবা আপনি যদি ডেটা যুক্ত করতে চান:
SomeCommand >> SomeFile.txt
আপনি যদি চান তবে stderrএটি ব্যবহার করুন:
SomeCommand &> SomeFile.txt
বা এই সংযোজন:
SomeCommand &>> SomeFile.txt
যদি আপনি কনসোলে এবং কোনও ফাইলে উভয় stderrএবং আউটপুট প্রদর্শিত করতে চান তবে এটি ব্যবহার করুন:
SomeCommand 2>&1 | tee SomeFile.txt
(আপনি যদি কেবল আউটপুট চান তবে উপরেরটি ফেলে দিন 2)
makeকমান্ডের আউটপুটটি কোনও ফাইলে আনতে তার পরিবর্তে এই বাক্য গঠন প্রয়োজন: make > someFile.txt 2>&1(উত্স: linuxquestions.org/questions/linux-newbie-8/… )
কোনও ফাইলে কমান্ডের আউটপুট লিখতে, সাধারণত 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
স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets
command >> output.txt
স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।
command 2> output.txt
স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets
command 2>> output.txt
স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।
command &> output.txt
স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি স্ট্রিম উভয়ই কেবল ফাইলে পুনঃনির্দেশিত হবে, টার্মিনালে কিছুই দৃশ্যমান হবে না। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets
command &>> output.txt
স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি স্ট্রিম উভয়ই কেবল ফাইলে পুনঃনির্দেশিত হবে, টার্মিনালে কিছুই দৃশ্যমান হবে না। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হয়ে যাবে ..
command | tee output.txt
স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি ফাইলটিতে অনুলিপি করা হবে, এটি এখনও টার্মিনালে দৃশ্যমান হবে। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets
command | tee -a output.txt
স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি ফাইলটিতে অনুলিপি করা হবে, এটি এখনও টার্মিনালে দৃশ্যমান হবে। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।
(*)
বাশের কোনও শর্টহ্যান্ড সিনট্যাক্স নেই যা কেবল দ্বিতীয় কমান্ডে কেবল স্টডিআরর পাইপিংয়ের অনুমতি দেয়, যা teeটেবিলটি সম্পূর্ণ করার জন্য আবার সংমিশ্রণে এখানে প্রয়োজন হবে । আপনার যদি সত্যিই এর মতো কিছু প্রয়োজন হয় তবে দয়া করে "স্টার্ডারকে কীভাবে পাইপ করবেন, এবং স্টাডাউট নয়?" দেখুন স্ট্যাক ওভারফ্লোতে কিছু উপায় কীভাবে এটি করা যেতে পারে যেমন স্ট্রিমগুলি অদলবদল করে বা প্রক্রিয়া প্রতিস্থাপন ব্যবহার করে।
command |& tee output.txt
টার্মিনালে দৃশ্যমান থাকা অবস্থায় স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয় স্ট্রিমই ফাইলটিতে অনুলিপি করা হবে। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets
command |& tee -a output.txt
টার্মিনালে দৃশ্যমান থাকা অবস্থায় স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয় স্ট্রিমই ফাইলটিতে অনুলিপি করা হবে। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।
2>&1STDERR কে STDOUT এ পুনঃনির্দেশ করে, STDOUT কে 1>&2STDERR এ 3>&1পুনঃনির্দেশ করে এবং স্ট্রিম 3 টি STDERR তে পুনর্নির্দেশ করে।
sh: 1: Syntax error: "&" unexpectedযখন আমি |& teeসি 9.io সার্ভারে পাইথন স্ক্রিপ্টটি ব্যবহার করি । মনে হচ্ছে একটি আলাদা শেল ব্যবহার করা হচ্ছে। সংস্করণ 4.3.11 (1) echo $SHELLদেখায় /bin/bashএবং $SHELL --versionদেখায় - দয়া করে। আমি #!/bin/bashআমার অজগর স্ক্রিপ্টে চেষ্টা করেছি কিন্তু এখনও পেয়েছি sh: 1: Syntax error। আমার যা প্রয়োজন তাই আমি পেয়েছিলাম তাই আমি আমার সার্ভারের মধ্যে shএবং অদ্ভুততা বাছাই করে ছেড়ে দিচ্ছি bash। ধন্যবাদ।
shএবং bash(হয়তো বা bashমধ্যে shমোড ...)। আপনার বর্তমান শেল প্রক্রিয়াটি ঠিক কী ব্যবহার করছে তা আপনি যাচাই করতে পারেন ps -p $$ -o cmd=, কারণ echo $SHELLএটি অবিশ্বাস্য এবং আপনি অন্য সাবসেল শুরু করেছেন কিনা তা উপেক্ষা করে আপনাকে আপনার লগইন শেলটি প্রদর্শন করবে।
আপনি teeকোনও ফাইলে আউটপুট প্রেরণ করতেও এটি ব্যবহার করতে পারেন :
command | tee ~/outputfile.txt
একটি সামান্য পরিবর্তন স্টাডারকেও ধরবে:
command 2>&1 | tee ~/outputfile.txt
বা সামান্য খাটো এবং কম জটিল:
command |& tee ~/outputfile.txt
teeআপনি যদি কমান্ড আউটপুট লাইভ দেখার সময় ক্যাপচার করতে সক্ষম হতে চান তবে তা কার্যকর ।
2>&1?
আপনি কমান্ড আউটপুট কোনও ফাইলে পুনর্নির্দেশ করতে পারেন:
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
lsএবং grep, সমর্থন --color=auto, যা স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল হলে কেবল রঙ কোডগুলি আউটপুট করে।
জন্য cronকাজ ইত্যাদি আপনি ব্যাশ এক্সটেনশন এড়াতে চান। সমতুল্য পসিক্স shপুনর্নির্দেশ অপারেটরগুলি
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
আপনি লক্ষ্য করবেন যে পসিএক্স সুবিধাটি কিছুটা অর্থে সহজ এবং আরও সোজা। &>সিনট্যাক্স থেকে ধার করা হয়েছিল cshযা ইতিমধ্যেই আপনি সন্তুষ্ট উচিত যে এটা একটা খারাপ ধারণা।
some_command | tee command.logএবং some_command > command.logএই সমস্যাটি রয়েছে যে তারা command.logরিয়েল-টাইমে ফাইলটিতে কমান্ড আউটপুট সংরক্ষণ করে না ।
এই সমস্যাটি এড়াতে এবং রিয়েল-টাইমে কমান্ড আউটপুট সংরক্ষণ করতে আপনি সংযোজন করতে পারেন unbufferযা expectপ্যাকেজটির সাথে আসে ।
উদাহরণ:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
ধরে নিলে log.pyরয়েছে:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
আপনি চালাতে পারেন unbuffer python log.py | tee command.logবাunbuffer python log.py > command.log
আরও তথ্য: আমি রিয়েল-টাইমে কোনও ফাইলের মধ্যে একটি কমান্ড আউটপুট কীভাবে সংরক্ষণ করতে পারি?
someCommand 2> someFile.txtএবং কিছুফিল.টেক্সটকেsomeCommand 2>> someFile.txtপুনঃনির্দেশstterrকরুন