bash - বশে শেষ কমান্ড থেকে আউটপুট reusing



terminal stdout (6)

কোনও রেজিস্ট্রিতে সংরক্ষিত বাশ কমান্ডের আউটপুট? যেমন $? কিছু অনুরূপ $? প্রস্থান অবস্থা পরিবর্তে আউটপুট ক্যাপচার।

আমি একটি পরিবর্তনশীল সঙ্গে আউটপুট বরাদ্দ করতে পারে:

output=$(command)

কিন্তু যে আরো টাইপিং হয় ...

https://ffff65535.com


অনুভভা এর উত্তর দ্বারা অনুপ্রাণিত, যা আমি মনে করি আসলে গ্রহণযোগ্য নয় কারণ এটি প্রতিটি আদেশকে দ্বিগুণ করে।

save_output() { 
   exec 1>&3 
   { [ -f /tmp/current ] && mv /tmp/current /tmp/last; }
   exec > >(tee /tmp/current)
}

exec 3>&1
trap save_output DEBUG

এইভাবে শেষ কমান্ডের আউটপুট / tmp / last তে হয় এবং কমান্ডটিকে দুবার বলা হয় না।


আপনি এই জন্য প্রয়োজন কি ঠিক নিশ্চিত না, তাই এই উত্তর প্রাসঙ্গিক হতে পারে না। আপনি সর্বদা একটি কমান্ডের আউটপুট সংরক্ষণ করতে পারেন: netstat >> output.txt , কিন্তু আমি মনে করি না যে আপনি এটি খুঁজছেন।

যদিও অবশ্যই প্রোগ্রামিং অপশন আছে; আপনি কমান্ডটি চালানোর পরে কেবল উপরের পাঠ্য ফাইলটি পড়ার জন্য একটি প্রোগ্রাম পেতে পারেন এবং এটি একটি পরিবর্তনশীল সাথে যুক্ত করুন এবং রুবিতে আমার পছন্দসই ভাষাতে আপনি 'ব্যাক্টিক্স' ব্যবহার করে একটি কমান্ড আউটপুট তৈরি করতে পারেন:

output = `ls`                       #(this is a comment) create variable out of command

if output.include? "Downloads"      #if statement to see if command includes 'Downloads' folder
print "there appears to be a folder named downloads in this directory."
else
print "there is no directory called downloads in this file."
end

একটি। আরবি ফাইলটিতে এটি ruby file.rb এবং এটি চালান: ruby file.rb এবং এটি কমান্ডের বাইরে একটি পরিবর্তনশীল তৈরি করবে এবং আপনাকে এটির ruby file.rb প্রয়োগ করার অনুমতি দেবে।


আমি একটি ধারণা আছে যে আমার কাছে অবিলম্বে বাস্তবায়ন করার সময় নেই।

কিন্তু আপনি যদি নীচের মত কিছু করেন তবে কী হবে:

$ MY_HISTORY_FILE = `get_temp_filename`
$ MY_HISTORY_FILE=$MY_HISTORY_FILE bash -i 2>&1 | tee $MY_HISTORY_FILE
$ some_command
$ cat $MY_HISTORY_FILE
$ # ^You'll want to filter that down in practice!

আইও বাফারিং সমস্যা হতে পারে। এছাড়াও ফাইল খুব বিশাল পেতে পারে। এক এই সমস্যার সমাধান সঙ্গে আসতে হবে।


উত্তর নেই। Bash কোনো প্যারামিটার বা তার মেমরির যে কোনও ব্লকের জন্য আউটপুট বরাদ্দ করে না। এছাড়াও, আপনি শুধুমাত্র অনুমতিপ্রাপ্ত ইন্টারফেস অপারেশন দ্বারা বাশ অ্যাক্সেস করার অনুমতি দেওয়া হয়। আপনি এটি হ্যাক না হওয়া পর্যন্ত বাশের ব্যক্তিগত তথ্য অ্যাক্সেসযোগ্য নয়।


কনসোলবক্সের মতো লেগেছে, আপনাকে ব্যাশ নিজেই হ্যাক করতে হবে। Here কিভাবে এটি অর্জন করতে পারে তার উপর একটি ভাল উদাহরণ। Stderred সংগ্রহস্থল (আসলে stdout রঙের জন্য বোঝানো) এটি নির্মাণ কিভাবে নির্দেশাবলী দেয়।

আমি এটি চেষ্টা করেছিলাম: .bashrc মতো কিছু নতুন ফাইল বর্ণনাকারীকে সংজ্ঞায়িত করা

exec 41>/tmp/my_console_log

(সংখ্যাটি ইচ্ছাকৃতভাবে) এবং stderred.c পরিবর্তনের সাথে সংশোধন করে যাতে সামগ্রীটি fd 41 এও লিখিত হয়। এটির কাজ করা হয়েছে তবে এটি NUL বাইটের লোডগুলি, অদ্ভুত ফর্ম্যাটিং এবং মূলত বাইনারি তথ্য, পঠনযোগ্য নয়। হয়তো ভাল সি বুঝতে ভাল কেউ চেষ্টা করতে পারে।

যদি তাই হয়, শেষ মুদ্রিত লাইন পেতে সবকিছু প্রয়োজন tail -n 1 [logfile]


যদি আপনি Mac এ থাকেন এবং ক্লায়বোর্ডে আপনার ভেরিয়েবলের লেখার পরিবর্তে আপনার আউটপুট সংরক্ষণ করা মনে না করেন তবে আপনি একটি কাজকর্ম হিসাবে পিবিসিপি এবং পবপাস্ট ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, ফাইলটি খুঁজে পেতে এবং অন্য কোন ফাইলের সাথে তার সামগ্রীটি বিচ্ছিন্ন করার পরিবর্তে এটি করার জন্য:

$ find app -name 'one.php' 
/var/bar/app/one.php

$ diff /var/bar/app/one.php /var/bar/two.php

আপনি এটা করতে পারেন:

$ find app -name 'one.php' | pbcopy
$ diff $(pbpaste) /var/bar/two.php

প্রথম কমান্ড চালানোর সময় স্ট্রিং /var/bar/app/one.php ক্লিপবোর্ডে থাকে।

যাইহোক, pbcopy এবং pbcopy পিবি ক্লিপবোর্ডের সমার্থক পেস্টবোর্ডের জন্য দাঁড়ানো।





stdout