ব্যাশের একটি সমৃদ্ধ ইতিহাস আছে। অর্থাৎ, এটি একটি পুরনো শেল যার একটি আরও পুরনো পূর্বপুরুষ (বোর্ন শেল), কিন্তু এটিও একটি চমৎকার history কমান্ড আছে যা অন্যান্য সব শেল ইতিহাস ইন্টারফেসকে ফিচারের সংখ্যা দিয়ে ছাড়িয়ে দিয়েছে। ব্যাশ ভার্সনের history রিভার্স সার্চ, কুইক রিকল, ইতিহাস রিরাইটিং, এবং আরও অনেক কিছু অনুমতি দেয়।
history কমান্ড অনেক অন্যান্য কমান্ডের মতো নয়। আপনি কমান্ডগুলো এক্সিকিউটেবল ফাইল হিসেবে সাধারণ সিস্টেম-লেভেল লোকেশনে পাওয়া যেতে অভ্যস্ত থাকতে পারেন যেমন /usr/bin, /usr/local/bin, বা ~/bin। বিল্ট-ইন history কমান্ড আপনার PATH-এ নেই এবং এর কোনো ফিজিক্যাল লোকেশন নেই:
$ which history
which: no history in [PATH]
বরং, history শেলের নিজস্ব একটি বিল্ট-ইন ফাংশন:
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]
Display or manipulate the history list.
[...]
এই কারণেই, প্রতিটি শেলে ইতিহাস ফাংশন ইউনিক, তাই যা আপনি ব্যাশে ব্যবহার করেন সেটি Tcsh বা Fish বা Dash-এ কাজ নাও করতে পারে, এবং যা আপনি সেগুলোতে ব্যবহার করেন সেটি ব্যাশে কাজ নাও করতে পারে। কিছু কেসে, ব্যাশ কী করতে পারে সেটি জানা অন্যান্য শেলের ব্যবহারকারীদের ইনস্পایر করতে পারে ব্যাশ বিহেভিয়ার ক্লোন করার জন্য আকর্ষণীয় হ্যাক তৈরি করতে, এবং এটি আপনার জানা নাও যাওয়া ব্যাশ ফিচারগুলো আনলক করতে পারে।
আপনার ব্যাশ ইতিহাস দেখুন
history কমান্ডের সবচেয়ে বেসিক এবং ঘনিস্ট ব্যবহার হলো আপনার শেল সেশনের ইতিহাস দেখতে:
$ echo "hello"
hello
$ echo "world"
world
$ history
1 echo "hello"
2 echo "world"
3 history
ইভেন্ট ডেজিগনেটর
ইভেন্ট ডেজিগনেটর আপনার ইতিহাসে ইভেন্ট দিয়ে সার্চ করে। এই প্রেক্ষাপটে একটি ইভেন্ট হলো আপনার ইতিহাসে লগ করা একটি কমান্ড, নিউলাইন ক্যারেক্টার দিয়ে ডিলিনেটেড। অন্য কথায়, এটি একটি লাইন, একটি ইনডেক্স নম্বর দিয়ে রেফারেন্স জন্য চিহ্নিত।
ইভেন্ট ডেজিগনেটরগুলো অধিকাংশ এক্সক্লামেশন পয়েন্ট দিয়ে শুরু হয়, কখনো কখনো যাকে ব্যাং বলা হয় (!).
আপনার ইতিহাস থেকে একটি কমান্ড রি-রান করতে, এক্সক্লামেশন পয়েন্ট ব্যবহার করুন তারপর তাত্ক্ষণিকভাবে (নো স্পেস) কমান্ডটির ইনডেক্স নম্বর যা আপনি রান করতে চান। উদাহরণস্বরূপ, ধরে নিন লাইন ১-এ কমান্ড echo "hello" আছে, এবং আপনি সেটি আবার চালাতে চান:
$ !1
echo "hello"
hello
আপনি রিলেটিভ পজিশনিং ব্যবহার করতে পারেন আপনার বর্তমান ইতিহাস পজিশন থেকে নেগেটিভ লাইন নম্বর দিয়ে। উদাহরণস্বরূপ, ইতিহাসে তিন এন্ট্রি পেছনে যেতে:
$ echo "foo"
foo
$ echo "bar"
bar
$ echo "baz"
baz
$ !-3
echo "foo"
foo
আপনি যদি শুধু এক লাইন পেছনে যান, আপনি শর্টহ্যান্ড !! ব্যবহার করতে পারেন !-1-এর পরিবর্তে। সেটি একটি সম্পূর্ণ কিস্ট্রোক বাঁচায়!
$ echo "foo"
$ !!
echo "foo"
foo
স্ট্রিং সার্চ
আপনি এন্ট্রিগুলোর মাধ্যমে একটি নির্দিষ্ট স্ট্রিং রিভার্সে সার্চ করুন একটি কমান্ড চালানোর জন্য। একটি কমান্ড খুঁজতে শুরু একটি নির্দিষ্ট স্ট্রিং দিয়ে, একটি এক্সক্লামেশন পয়েন্ট ব্যবহার করুন তারপর তাত্ক্ষণিকভাবে (নো স্পেস) স্ট্রিংটি যা আপনি খুঁজছেন:
$ echo "foo"
$ true
$ false
$ !echo
echo "foo"
foo
আপনি যেকোনো পজিশনে একটি স্ট্রিং ধারণকারী একটি কমান্ড খুঁজতে পারেন (শুধু শুরুতে নয়)। সেটি করতে, ! প্লাস স্ট্রিংটি যা আপনি খুঁজছেন, সাধারণভাবেই ব্যবহার করুন, কিন্তু স্ট্রিংটিকে প্রশ্নবোধক চিহ্ন দিয়ে দুপাশে ঘেরে দিন। আপনি ট্রেইলিং কুশন মার্ক অমিট করতে পারেন আপনি যদি জানেন স্ট্রিংটি তাত্ক্ষণিকভাবে নিউলাইন ক্যারেক্টারের দ্বারা ফলো করা হয় (অর্থাৎ এটি আপনি Return চাপার আগে লিখে শেষ করেছেন):
$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo
স্ট্রিং সাবস্টিটিউশন
এক লাইনের শুরুতে স্ট্রিং সার্চ করার মতো, আপনি একটি স্ট্রিং সার্চ করতে পারেন এবং সেটিকে একটি নতুন স্ট্রিং দিয়ে রিপ্লেস করতে পারেন, কমান্ডটি পরিবর্তন করে:
$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo
ইতিহাসকে উপযোগী করুন
ব্যাশে, history কমান্ড এখানে কভার করা হয়েছে তার চেয়ে অনেক কিছু করতে সক্ষম, কিন্তু এটি ইতিহাস ব্যবহার করার অভ্যাস করার জন্য একটি ভালো শুরু, শুধু এটি একটি রেফারেন্স হিসেবে চ 그저 না করিয়ে। history কমান্ড বাউন্স ব্যবহার করুন, এবং দেখুন আপনি কতটুকু করতে পারেন কমান্ড টাইপ করা ছাড়া। আপনি নিজেকে চকিত করতে পারেন!