প্রথমত, দ্রষ্টব্য যে আপনার ইতিহাস ইতিমধ্যে একটি ফাইলে রয়েছে। আপনি যদি বাশ চালাচ্ছেন তবে এর নামটি সাধারণত ~/.bash_history
। আরো নির্দিষ্টভাবে, এটি যাই হোক না কেন আপনি পরিবর্তনশীল সেট করেছি HISTFILE
করতে। আপনি যদি এটি অন্য কোনও ফাইলে অনুলিপি করতে চান তবে চালানcat "$HISTFILE" > hist.txt
এখন, কেন history
বাশ শেল স্ক্রিপ্টে কমান্ডটি কাজ করে না, কারণ আপনার বর্তমান শেল সেশনের একটি অ-ইন্টারেক্টিভ চাইল্ড শেলটিতে স্ক্রিপ্টগুলি চালিত হয়। শিশু শেলগুলি পিতামাতার সমস্ত পরিবেশের উত্তরাধিকার সূত্রে প্রাপ্ত হয় না (তাই সমস্ত সেট চলকগুলির নয়), রফতানি করা কেবলমাত্র ভেরিয়েবলগুলি। উদাহরণস্বরূপ, নীচের স্ক্রিপ্টটি ভেরিয়েবলের মান প্রতিধ্বনিত করবে $var
:
#!/bin/bash
echo "$var"
এখন, $var
কিছুতে সেট করুন এবং স্ক্রিপ্টটি চালান:
$ var="foo"
$ foo.sh
VAR:
এর পরে, প্রথমে চলকটি রফতানি করুন:
$ var="foo"
$ export var
$ foo.sh
VAR: foo
আপনি দেখতে পাচ্ছেন, যখন পরিবর্তনশীল রফতানি করা হয়েছে, এটি শিশু শেলগুলির জন্য উপলব্ধ।
যেমনটি আমি আগেই বলেছি, ইতিহাসটি ভেরিয়েবল দ্বারা নির্দেশিত ফাইলে সংরক্ষণ করা হয় $HISTFILENAME
। যেটি ডিফল্টরূপে রফতানি হয় না, স্ক্রিপ্ট চালানোর সময় এটি সেট করা হয় না:
$ cat foo.sh
#!/bin/bash
echo "HISTFILE: $HISTFILE"
$ ./foo.sh
HISTFILE:
$ echo $HISTFILE
/home/terdon/.bash_history
উপরের উদাহরণে আপনি দেখতে পাচ্ছেন, পরিবর্তনশীলটি HISTFILE
আমার সাধারণ শেল সেশনে সেট করা আছে, তবে স্ক্রিপ্টটি চালানোর সময় খালি রয়েছে।
সুতরাং, ইতিহাসটি পেতে আপনার কাছে কয়েকটি বিকল্প রয়েছে:
ডিফল্ট HISTFILE
মান $HOME/.bash_history
। আপনি যদি এটি পরিবর্তন না করে থাকেন তবে আপনি সহজেই আপনার স্ক্রিপ্টে এই আদেশটি চালাতে পারেন:
cat "$HOME/.bash_history" > history
আপনি $HISTFILE
আপনার স্ক্রিপ্টে ভেরিয়েবলটি পাস করতে পারেন এবং cat
এটি:
#!/bin/bash
cat "$1" > history
উপরোক্ত হিসাবে সংরক্ষণ করুন foo.sh
এবং এটি চালান:
./foo.sh "$HISTORY"
ভেরিয়েবলটি রফতানি হয়েছে তা নিশ্চিত করুন। আপনার ~/.bash_profile
(যদি এটি বিদ্যমান থাকে) বা ~/.profile
( ~/.bash_profile
উপস্থিত না থাকে) ফাইলগুলিতে এই লাইনটি যুক্ত করুন :
export HISTFILE
তারপরে, লগ আউট এবং আবার লগ ইন করুন এবং আপনি history > hist.txt
প্রত্যাশা মতো স্ক্রিপ্ট থেকে চালাতে সক্ষম হবেন । এর কারণ export VAR
হল "শিশু শেলগুলির জন্য make VAR উপলব্ধ করুন" means ব্যবহারিক ভাষায়, এর অর্থ হ'ল এর HISTFILE
স্ক্রিপ্টটি চালানোর জন্য আপনি যে অ-ইন্টারেক্টিভ শেল ব্যবহার করেন তার মান উত্তরাধিকার সূত্রে প্রাপ্ত হবে।
এখন, HISTFILE
সেটটি সেট হয়ে যাওয়ার পরে, এটি স্ক্রিপ্টটি চালানো শেল দ্বারা পড়েনি। সুতরাং, এটি কাজ করতে, আপনাকে history -r
প্রথমে এটি পড়তে হবে । পুরো স্ক্রিপ্টটি দেখতে এমন হবে:
$!/bin/bash
history -r
history > hist.txt
বিকল্পভাবে, স্ক্রিপ্টটি চালানোর আগে কেবল এটি ম্যানুয়ালি রফতানি করুন:
$ export HISTFILE
তবে আপনার এখনও history -r
স্ক্রিপ্টে থাকা দরকার ।
@ P0llard এর উত্তর অনুসারে আপনি source
এটির পরামর্শ দিতে পারেন ।