বাশ হিস্ট্রি শর্টকাটের অধিকাংশ গাইড সবগুলো এক্সহাস্টিভলি লিস্ট করে। সমস্যা হলো আমি একটি শর্টকাট একবার ব্যবহার করি, তারপর সব সম্ভাবনা ট্রাই করতে গিয়ে চোখের সামনে অন্ধকার ছায়। তারপর আমার ওয়ার্কিং ডে শুরু হয় এবং আমি সেগুলো সম্পূর্ণ ভুলে যাই, শুধু চিরপরিচিত !! ট্রিক মনে থাকে যা আমি বাশ ব্যবহার শুরু করার সময় শিখেছিলাম।
তাই অধিকাংশ শর্টকাট মেমরিতে কমিট হয়নি।
এই আর্টিকেলে আমি যেসব শর্টকাট আসলে প্রতিদিন ব্যবহার করি সেগুলো আউटलাইন করা হলো। এটি আমার বই, Learn Bash the hard way-এর কিছু কন্টেন্টের ওপর ভিত্তি করে; (আপনি এর প্রিভিউ পড়ে আরও জানতে পারেন)।
লোকেরা আমাকে এই শর্টকাটগুলো ব্যবহার করতে দেখে প্রায়শই জিজ্ঞাসা করে, "তুমি সেখানে কী করলি!?" এখানে ন্যূনতম পরিশ্রম বা বুদ্ধি দরকার, কিন্তু সত্যিকারের শিখতে, আমি সুপারিশ করি প্রতিদিন একটি শর্টকাট এক সপ্তাহ ব্যবহার করুন, তারপর পরেরটিতে যান। আপনার আঙ্গুলের নিচে সেগুলো আনার জন্য সময় নেওয়া ارزشীয়, কারণ দীর্ঘমেয়াদে আপনি যে সময় বাঁচাবেন সেটি উল্লেখযোগ্য।
১. "লাস্ট আর্গুমেন্ট" वाला: !$
এই আর্টিকেল থেকে আপনি যদি শুধু একটা শর্টকাট নেন, সেটি হোক এইটা। এটি লাস্ট কমান্ডের লাস্ট আর্গুমেন্ট আপনার লাইনে সাবস্টিটিউট করে।
এই সিনারিও বিবেচনা করুন:
$ mv /path/to/wrongfile /some/other/place mv: cannot stat '/path/to/wrongfile': No such file or directory
আচ্ছা, আমি কমান্ডে wrongfile ফাইলনেম দিয়েছি। আমাকে rightfile দিতে হতো।
আপনি সিদ্ধান্ত নিতে পারেন লাস্ট কমান্ড রি-টাইপ করে wrongfile কে rightfile দিয়ে রিপ্লেস করবেন। বদলে, আপনি টাইপ করতে পারেন:
$ mv /path/to/rightfile !$ mv /path/to/rightfile /some/other/place
এবং কমান্ডটি কাজ করবে।
বাশে একই জিনিস অর্জন করার অন্যান্য উপায় আছে শর্টকাট দিয়ে, কিন্তু লাস্ট কমান্ডের লাস্ট আর্গুমেন্ট পুনরায় ব্যবহার করার এই ট্রিকটি আমি সবচেয়ে বেশি ব্যবহার করি।
২. "nতম আর্গুমেন্ট" वाला: !:2
আপনি কি এমন কিছু করেছেন?
$ tar -cvf afolder afolder.tar tar: failed to open
অনেকের মত আমিও tar (এবং ln)-এর আর্গুমেন্টগুলো ঘুলা ফেলি সিকরাস“我想 ছাড়া।

যখন আপনি আর্গুমেন্টগুলো মিক্স আপ করেন, আপনি চালাতে পারেন:
$ !:0 !:1 !:3 !:2 tar -cvf afolder.tar afolder
এবং আপনার রেপুটেশন বাঁচবে।
লাস্ট কমান্ডের আইটেমগুলো জিরো-ইন্ডেক্সড এবং !:-এর পরে নাম্বার দিয়ে সাবস্টিটিউট করা যায়।
স্পষ্টত:, আপনি এটিকে লাস্ট কমান্ড থেকে স্পেসিফিক আর্গুমেন্টগুলো পুনরায় ব্যবহার করার জন্যও ব্যবহার করতে পারেন সবগুলো না।
৩. "সব আর্গুমেন্ট" वाला: !:1-$
কল্পনা করুন আমি একটি কমান্ড রান করলাম:
$ grep '(ping|pong)' afile
আর্গুমেন্টগুলো ঠিক আছে; কিন্তু আমি ping বা pong ম্যাচ করতে চাই একটি ফাইলে, কিন্তু grep বদলে egrep ব্যবহার করলাম।
আমি egrep টাইপ শুরু করলাম, কিন্তু বাকি আর্গুমেন্টগুলো রি-টাইপ করতে চাই না। তাই আমি !:1$ শর্টকাট ব্যবহার করতে পারি পূর্বের কমান্ডের দ্বিতীয় আর্গুমেন্ট থেকে (মনে রাখুন সেগুলো জিরো-ইন্ডেক্সড) লাস্ট আর্গুমেন্ট পর্যন্ত ( $ সাইন দ্বারা প্রতিনিধিত্ব) সব আর্গুমেন্ট চাইতে।
$ egrep !:1-$ egrep '(ping|pong)' afile ping
আপনাকে 1-$ পিক করতে হবে না; আপনি সাবসেট পিক করতে পারেন যেমন 1-2 বা 3-9 (যদি পূর্বের কমান্ডে ততগুলো আর্গুমেন্ট থাকে)।
৪. "লাস্ট বাট n" वाला: !-2:$
উপরোক্ত শর্টকাটগুলো চমৎকার যখন আমি অবিলম্বে জানি কীভাবে লাস্ট কমান্ড ঠিক করতে হবে, কিন্তু প্রায়শই আমি মূল কমান্ডের পর আরও কমান্ড চালিয়ে ফেলি, যার মানে লাস্ট কমান্ড আর সেটি নয় যেটি আমি রেফারেন্স করতে চাই।
উদাহরণস্বরূপ, আগের mv উদাহরণ ব্যবহার করে, যদি আমি আমার ভুলের পর ফোল্ডারের কন্টেন্টস চেক করার জন্য ls চালাই:
$ mv /path/to/wrongfile /some/other/place mv: cannot stat '/path/to/wrongfile': No such file or directory $ ls /path/to/ rightfile
আমি আর !$ শর্টকাট ব্যবহার করতে পারি না।
এই কেসগুলোতে, আমি -n: (যেখানে n হলো ইতিহাসে কতগুলো কমান্ড পিছনে যেতে হবে) !-এর পরে ইন্সার্ট করে একটি পুরনো কমান্ড থেকে লাস্ট আর্গুমেন্ট গ্র্যাব করতে পারি:
$ mv /path/to/rightfile !-2:$ mv /path/to/rightfile /some/other/place
একবার শিখলে, আপনি আশ্চর্য হতে পারেন কতটুকু প্রয়োজন হয়।
৫. "আমাকে ফোল্ডারটা দাও" वाला: !$:h
এটি মুখোশে কম আশাবাদী লাগে, কিন্তু আমি এটিকে দিনে দশেক বার ব্যবহার করি।
কল্পনা করুন আমি একটি কমান্ড রান করলাম:
$ tar -cvf system.tar /etc/system tar: /etc/system: Cannot stat: No such file or directory tar: Error exit delayed from previous errors.
প্রথম কীভাবে আমি চাইতে পারি /etc ফোল্ডারে যাওয়া যাতে দেখতে পাই সেখানে কী আছে এবং বুঝতে পারি আমি কী ভুল করলাম।
আমি এক স্ট্রোকে এটি করতে পারি:
$ cd !$:h cd /etc
এটি বলে: "লাস্ট কমান্ডের লাস্ট আর্গুমেন্ট নাও (/etc/system) এবং এর লাস্ট ফাইলনেম কম্পোনেন্ট বাদ দাও, শুধু /etc রেখে দাও।"
৬. "কারেন্ট লাইন" वाला: !#:1
বছর ধরে আমি কখনো কখনো চিন্তা করতাম কি আমি কারেন্ট লাইনের আর্গুমেন্ট রেফারেন্স করতে পারি কিনা, نهایتত্বে সেটি খুঁজে বের করে শিখলাম। কাশ আমি অনেক আগে করতাম। আমি এটি সবচেয়ে বেশি ব্যাকআপ ফাইল बनाने জন্য ব্যবহার করি:
$ cp /path/to/some/file !#:1.bak cp /path/to/some/file /path/to/some/file.bak
এটি একবার আঙ্গুলের নিচে আসলে, এটি …-এর একটি খুব দ্রুত অল্টার্নেটিভ হতে পারে।
৭. "সার্চ এন্ড রিপ্লেস" वाला: !!:gs
এটি রেফারেন্স করা কমান্ড জুড়ে সার্চ করে এবং প্রথম দুটি / ক্যারেক্টারের মাঝপথের কন্টেন্টকে দ্বিতীয় দুটি /-এর মাঝপথের কন্টেন্ট দিয়ে রিপ্লেস করে।
মান লো আমি বিশ্বকে বলতে চাই যে আমার s কী কাজ করে না এবং এর বদলে f আউটপুট করে:
$ echo my f key doef not work my f key doef not work
তারপর আমি বুঝলাম আমি কেবল ভুলে f কী হিট করছিলাম। সব f কে s দিয়ে রিপ্লেস করতে আমি টাইপ করতে পারি:
$ !!:gs/f /s / echo my s key does not work my s key does not work
এটি শুধু সিঙ্গল ক্যারেক্টারে কাজ করে না; আমি শব্দ বা বাক্যও রিপ্লেস করতে পারি:
$ !!:gs/does/did/ echo my s key did not work my s key did not work
সেগুলো টেস্ট করুন
শুধু দেখানোর জন্য কীভাবে এই শর্টকাটগুলো কম্বাইন করা যায়, আপনি কি বুঝতে পারেন এই নখের কतरা গুলো কী আউটপুট দেবে?
$ ping !#:0:gs/i/o $ vi /tmp/!:0.txt $ ls !$:h $ cd !-2:h $ touch !$!-3:$ !! !$.txt $ cat !:1-$
উপসংহার
বাশ দৈনন্দিন কমান্ড-লাইন ব্যবহারকারীর জন্য শর্টকাটের একটি এলিগেন্ট উৎস হতে পারে। হাজার হাজার টিপস ও ট্রিক্স শিখতে থাকে, কিন্তু এগুলো আমার প্রিয় যেগুলো আমি ঘন ঘন ব্যবহার করি।
আপনি যদি আরও গভীরে যেতে চান বাশ যা শিখাতে পারে, আমার বই, Learn Bash the hard way কিনুন অথবা আমার অনলাইন কোর্স, Master the Bash shell চেক আউট করুন।
এই আর্টিকেলটি মূলত ইয়ানের ব্লগ, Zwischenzugs.com-এ পোস্ট করা হয়েছিল, এবং অনুমতিতে পুনরায় ব্যবহার করা হয়েছে।