সূচিপত্র

  1. fish shell: একটি সহজ ও স্মার্ট শেল
  2. সুবিধাসমূহ
  3. Autosuggestions
  4. Tab Completion
  5. Syntax Highlighting
  6. Universal Variables
  7. Abbreviations
  8. Emacs and Vi Keybindings
  9. Emacs মোড - ডিফল্ট ও সহজ
  10. Vi মোড - Vim ব্যবহারকারীদের জন্য
  11. Web-based Configuration
  12. Bash বনাম Fish: এক নজরে
  13. ইন্সটল ও সেটআপ
  14. পরামর্শ ও কৌশল: fish ব্যবহার করে আরো দক্ষভাবে কাজ করুন
  15. ১. হিস্টোরি সার্চ আরও শক্তিশালী করুন
  16. ২. Universal Variable দিয়ে কাস্টম সেটিংস সংরক্ষণ করুন
  17. ৩. কমান্ডের সময়মাত্রা ট্র্যাক করুন
  18. ৪. ফাংশন তৈরি করে সাধারণ কাজগুলো অটোমেট করুন
  19. ৫. Abbreviations কে আরও কার্যকরীভাবে ব্যবহার করুন
  20. ৬. ডিরেক্টরি হিস্টোরি দিয়ে দ্রুত নেভিগেশন
  21. সাধারণ সমস্যা ও সমাধান
  22. ১. Bash স্ক্রিপ্ট fish-এ কাজ করছে না
  23. ২. সিস্টেম কমান্ড কাজ করছে না
  24. ৩. কমান্ড হিস্ট্রি পুরনো কমান্ড দেখাচ্ছে না
fish shell: একটি সহজ ও স্মার্ট শেল fish shell: একটি সহজ ও স্মার্ট শেল

fish shell: একটি সহজ ও স্মার্ট শেল

এই আর্টিকেলে অ্যাফিলিয়েট লিংক রয়েছে। অর্থাৎ, এরূপ লিংক থেকে কিছু কিনলে আপনার কোন খরচ ছাড়াই আমি কমিশন লাভ করি। কোনো পণ্যের গুণগত মানের নিশ্চয়তা আমি দিতে পারি না, কেননা পণ্যসমূহের বিবরণ আমি প্রকাশক/বিক্রেতার দেওয়া বর্ণনা অনুযায়ীই উপস্থাপন করি। তবে খারাপ পণ্য পেলে অবশ্যই আমাকে জানাবেন। আর আমার কাজ ভাল লাগলে অনুগ্রহ করে অ্যাফিলিয়েট লিংক থেকে পণ্য ক্রয় করে আমাকে সহায়তা করুন।

fish (Friendly Interactive Shell) হচ্ছে bash বা zsh এর মতই একটি কমান্ড লাইন শেল। শেল হচ্ছে একটা কমান্ড লাইন ইন্টারপ্রেটার যা আমাদেরকে বিভিন্ন কমান্ড দিয়ে কম্পিউটার চালাতে সহায়তা করে। যদি শেল সম্পর্কে আপনার খুব একটা জানাশোনা না থাকে, তাহলে খুব সম্ভবত আপনি bash ব্যবহার করছেন কারণ লিনাক্স ডিস্ট্রোগুলোতে সাধারণত এটাই ইন্সটল করে দেয়া থাকে।

fish শেলের সুবিধা হচ্ছে, অনেক প্রয়োজনীয় ফিচার এটাতে কোন কনফিগারেশন ছাড়াই কাজ করে। যদি আপনি শেল স্ক্রিপ্ট সিনট্যাক্স বা শেল কনফিগারেশন শেখার ঝামেলায় না গিয়েই নিজের কমান্ড লাইনকে আরেকটু স্মার্ট ও সুন্দর বানাতে চান, তাহলে fish ব্যবহার করতে পারেন। চলুন একনজরে এটার কিছু চমৎকার সুবিধা দেখে নেয়া যাক।

সুবিধাসমূহ

Autosuggestions

fish আপনাকে কমান্ড লেখার সাথে সাথে ইন-লাইন সাজেশন দিবে। এক্ষেত্রে এটি সাধারণ সাজেশনের পাশাপাশি আপনার পূর্ববর্তী কমান্ডগুলোও সাজেস্ট করে। আপনি আগে যা কিছু রান করেছেন, সেটার ওপর ভিত্তি করে সাজেশন দেয়। এই সুবিধার কারণে আপনাকে এক কমান্ড বারবার লিখতে হবে না। তাছাড়া, আপনি CTRL + R চেপে আপনার আগের কমান্ডগুলো সার্চও করতে পারবেন।

Tab Completion

fish উন্নত মানের Tab Completion সাপোর্ট করে। bash এ sudo লেখার পর আর Tab Completion কাজ করে না। কিন্তু fish এ সেই সমস্যা নেই। এখানে কমান্ড ও অপশনগুলোর সাথে সহায়ক বিবরণও দেয়া থাকে। আপনি দ্বিতীয়বার TAB চেপে অপশন বাছাই করতে পারবেন। fish ফাইল লোকেশন, এমনকি কমান্ড আর্গুমেন্টও কমপ্লিট করতে পারে। যেমন, man লিখে TAB চাপলে ইনস্টল করা ম্যানুয়াল পেজগুলো দেখাবে। প্যাকেজ ম্যানেজার কমান্ড দিয়ে ইনস্টলযোগ্য বা ইতিমধ্যে ইনস্টল করা প্যাকেজও দেখা যাবে। যেমন, আর্চ লিনাক্সে প্যাকেজ ইন্সটল কমান্ড sudo pacman -S লিখে TAB চাপলে ইনস্টলযোগ্য প্যাকেজগুলো দেখাবে। অন্যদিকে, প্যাকেজ ডিলিটের কমান্ড sudo pacman -Rs লিখে TAB চাপলে ইন্সটল করা প্যাকেজগুলো দেখাবে।

Syntax Highlighting

কোন কনফিগারেশন ছাড়াই fish শেলে Syntax Highlighting কাজ করে। আপনি কমান্ড লেখার সময়ই fish সেটা হাইলাইট করতে থাকবে। ভুল কমান্ডকে লাল রঙে চিহ্নিত করা হয়। পাশাপাশি, সঠিক ফাইল লোকেশন লিখলে তার নিচে দাগ দেয়া হয়। এ দ্বারা বোঝা যায় ফাইল/ফোল্ডারটি সিস্টেমে আছে।

Universal Variables

Universal Variable হচ্ছে এমন এক ধরনের চলক যেটা fish শেলের সব সেশনেই থাকে এবং রিবুট করলেও এর মান বদলায় না। fish তার অনেক কনফিগারেশন অপশন Universal Variable হিসেবে জমা রাখে। যার ফলে, একটা কনফিগারেশনের চলক একবার পরিবর্তন করলেই সেটা স্থায়ীভাবে বদলে যাবে এবং তৎক্ষণাৎ প্রয়োগ হবে। Universal Variable এর কার্যপ্রক্রিয়া সরাসরি দেখার জন্য দুইটা fish উইন্ডো খুলুন। তারপর, যেকোন একটাতে নিচের কমান্ড রান করুন:

set fish_color_cwd blue

যেহেতু, fish_color_cwd একটা Universal Variable, তাই শেল প্রম্পটে বর্তমান working directory এর রঙ দুইটা উইন্ডোতেই বদলে যাবে।

একই কারণে fish শেলে $PATH চলকে কোন ডিরেক্টরি যুক্ত করাও খুবই সহজ। যেমন /usr/local/bin কে $PATH চলকে স্থায়ীভাবে যুক্ত করতে রান করুন:

fish_add_path /usr/local/bin

এটার সুবিধা হচ্ছে একটা সামান্য কাজে আপনার ফাইল ঘাঁটাঘাঁটি করা লাগছে না। এই কমান্ড $fish_user_paths নামক Universal Variable ব্যবহার করে, যেটার মান $PATH চলকের শুরুতে আপনা-আপনি যুক্ত করা হয়। যার কারণে সিস্টেম রিবুট করার পরেও $PATH এর নতুন মান বিদ্যমান থাকবে।

Abbreviations

fish শেলে আপনি কমান্ডকে সংক্ষিপ্ত করতে পারবেন। যেমন ধরুন, আর্চ লিনাক্সে প্যাকেজ ইন্সটল করতে আপনাকে sudo pacman -S <pkg_name> কমান্ড রান করতে হয়। আপনি চাইলে sudo pacman -S কে সংক্ষেপ করে install বানিয়ে ফেলতে পারেন। তখন আপনি install লিখলেই fish সেটাকে sudo pacman -S এ রূপান্তর করে দিবে। তার জন্য নিচের কমান্ড রান করুন:

abbr -a install "sudo pacman -S"

তবে এটিকে স্থায়ী করার জন্য fish শেলের কনফিগ ফাইল config.fish এ যুক্ত করতে হবে। আরেকটি কাছাকাছি ধরনের ফিচার হচ্ছে Alias। কিন্তু এটাতে মূল কমান্ড দেখায় না। তার চেয়ে Abbreviations উত্তম, কারণ এটি মূল কমান্ড দেখাবে এবং শেল হিস্টোরিতেও মূল কমান্ডটিই থাকবে।

Emacs and Vi Keybindings

fish শেলে আপনি দুইভাবে কমান্ড লাইন এডিট করতে পারেন: Emacs মোডে (সহজ) অথবা Vi মোডে (শক্তিশালী)।

Emacs মোড - ডিফল্ট ও সহজ

Emacs কোড এডিটরের কিবাইন্ডিং fish শেলে ডিফল্টভাবে ব্যবহৃত হয়। যেমন:

  • Ctrl + A : লাইনের শুরুতে যান
  • Ctrl + E : লাইনের শেষে যান
  • Ctrl + U : কার্সর থেকে লাইনের শুরু পর্যন্ত ডিলিট করুন
  • Ctrl + K : কার্সর থেকে লাইনের শেষ পর্যন্ত ডিলিট করুন

সবচেয়ে সহজ, কোন আলাদা এডিটিং মোড নেই!

Vi মোড - Vim ব্যবহারকারীদের জন্য

# Vi মোড চালু করুন
fish_vi_key_bindings

দুইটি এডিটিং মোড রয়েছে এতে:

  • নরমাল মোড: ন্যা‍ভিগেশন ও কমান্ডের জন্য (ESC চাপুন)
  • ইনসার্ট মোড: টাইপ করার জন্য (i চাপুন)

নরমাল মোডের দারুন কিছু কমান্ড:

  • h,j,k,l : কার্সর নাড়াচাড়া করুন
  • i : ইনসার্ট মোডে যান
  • dd : সম্পূর্ণ লাইন ডিলিট করুন
  • p : ডিলিট করা টেক্সট পেস্ট করুন
  • / : কমান্ড হিস্ট্রি সার্চ করুন

Vi মোডে কাজ করলে আপনি একজন টার্মিনাল নিঞ্জার মতো অনুভূতি পাবেন!

Web-based Configuration

fish শেলের ওয়েব-ভিত্তিক কনফিগারেশন প্যানেলের স্ক্রিনশট

fish শেল Web-based Configuration সাপোর্ট করে। fish_config কমান্ড রান করলে আপনার ব্রাউজারে এই কনফিগারেশন ইন্টারফেসটি খুলবে। এখান থেকে সহজেই শেলের রং, প্রম্পট ইত্যাদি বদলানো যায়, এবং চলক, ফাংশন ইত্যাদির বিবরণ দেখা যায়।

Bash বনাম Fish: এক নজরে

বৈশিষ্ট্যBashFish
কনফিগারেশনটেক্সট-ভিত্তিক (.bashrc এডিট করতে হয়)ওয়েব-ভিত্তিক কনফিগারেশন ইন্টারফেস আছে
অটো-সাজেশননেই (প্লাগ-ইন লাগে)ডিফল্টভাবে আছে
সিনট্যাক্স হাইলাইটিংনেই (প্লাগ-ইন লাগে)ডিফল্টভাবে আছে
ট্যাব কমপ্লিশনবেসিকস্মার্ট ও বর্ণনামূলক
স্ক্রিপ্ট কম্প্যাটিবিলিটিসর্বজনীন (POSIX-compliant, যেকোন অপারেটিং সিস্টেমে চলে)পুরোপুরি POSIX-compliant নয়
মূল বৈশিষ্ট্যউন্নত কম্প্যাটিবিলিটি, শক্তিশালী স্ক্রিপ্টিংইউজার-ফ্রেন্ডলি ও ইন্টারেক্টিভ

সারসংক্ষেপ:

  • Bash নির্বাচন করুন যদি আপনাকে জটিল স্ক্রিপ্ট লিখতে হয়, সর্বাধিক নিয়ন্ত্রণ দরকার হয়, অথবা সর্বজনীন সাপোর্ট প্রয়োজন হয়।
  • Fish নির্বাচন করুন যদি আপনি কনফিগারেশনের ঝামেলা ছাড়াই স্মার্ট ফিচার এবং সহজ ও আরামদায়ক শেল ব্যবহারের অভিজ্ঞতা পেতে চান।
🚀 প্রোগ্রামিং ক্যারিয়ারের জন্য পরবর্তী স্টেপ

fish শেল মাস্টার করার পাশাপাশি প্রোগ্রামিং ক্যারিয়ারকে পরবর্তী লেভেলে নিতে প্রস্তুত হোন!

ঝংকার মাহবুবের প্রোগ্রামিংয়ের চৌদ্দগোষ্ঠী বইটি নিয়ে আসছে প্রোগ্রামারদের জন্য গাইডলাইন:

🔥 বইটি যা অফার করে:

  • বেসিক প্রোগ্রামিং শেখার পর পরবর্তী লেভেলে যেতে সহায়তা করা, চাকুরি/ক্যারিয়ার গাইডলাইন দেয়া
  • প্রফেশনাল সফটওয়্যার তৈরির ব্যাপারে ধারণা দেয়া
  • ডাটা স্ট্রাকচার, অ্যালগরিদম, টাইম কমপ্লেক্সিটি ইত্যাদি জটিল বিষয়কে মজার ভাষায় উপস্থাপন
  • প্রোগ্রামিং ইন্টারভিউর জন্য প্রস্তুত করা, যাতে ছোট-বড় যেকোন কোম্পানির যেকোন ধরণের প্রশ্নের উত্তর দিতে পারা যায়

📈 যারা উপকৃত হবে:

  • প্রোগ্রামিং বেসিক জানে কিন্তু পরবর্তী স্টেপ অজানা
  • চাকরি/ইন্টারভিউ প্রস্তুতিতে গাইডলাইন প্রয়োজন
  • বাংলা ভাষায় ও রসিকতার সহিত প্রোগ্রামিং শিখতে চান

💡 বইটির বিশেষত্ব: চায়ের দোকানের গল্প-আড্ডার মত মজার স্টাইলে জটিল বিষয় সহজভাবে উপস্থাপন। শিক্ষক ডটকমের প্রতিষ্ঠাতা ড. রাগিব হাসান কর্তৃক সুপারিশকৃত।

👉 বইটি সম্পর্কে বিস্তারিত জানুন ও ক্রয় করুন

বইটি কিনে প্রোগ্রামিংয়ের কেমন গুষ্টি উদ্ধার করলেন, অবশ্যই জানাতে ভুলবেন না!


যদি আপনি প্রোগ্রামিংয়ে একেবারেই নতুন হন, ভেরিয়েবল, লুপ ইত্যাদি জানা না থাকে, তাহলে একই লেখকের হাবলুদের জন্য প্রোগ্রামিং বইটি পড়তে পারেন। প্রোগ্রামিংয়ের চৌদ্দগোষ্ঠী বইটি পড়তে আপনার হালকা কষ্ট হবে, কারণ এটি লেখা হয়েছে যারা প্রোগ্রামিংয়ের বেসিক জানে তাদের জন্য। তাছাড়া আপনি আরেকজন নামকরা লেখক তামিম শাহরিয়ার সুবিনের পাইথন দিয়ে প্রোগ্রামিং শেখা বইটিও পড়তে পারেন, যেটিতে সহজ প্রোগ্রামিং ভাষা পাইথন ব্যবহার করা হয়েছে।

ইন্সটল ও সেটআপ

  • Debian
Terminal window
sudo apt install fish
  • Arch Linux
Terminal window
sudo pacman -S fish
  • Fedora
Terminal window
sudo dnf install fish

fish সহজে সেটআপ করতে, আপনার টার্মিনালে প্রধান শেলের পরিবর্তে সরাসরি fish চালু করার সেটিং অন করে দিন। তার জন্য আপনার সিস্টেমের কোথায় এটি ইন্সটল করা হয়েছে তা খুঁজে বের করতে হবে:

Terminal window
which fish

তাছাড়া, fish শেলকে লগ-ইন শেল হিসেবেও ব্যবহার করা যায়:

Terminal window
chsh -s $(which fish)

তবে লগ-ইন শেল হিসেবে ব্যবহার করলে কিছু সমস্যা দেখা দিতে পারে, যেমন $PATH এর মান ভুল থাকতে পারে। কিছু লিনাক্স ডিস্ট্রো ও প্রোগ্রাম প্রধান শেল হিসেবে bash চায়। অনেক সফটওয়্যারে fish শেলের সাপোর্ট ভাল থাকে না। তাই আপনাকে এই বিষয়গুলো বিবেচনা করেই কাজটি করতে হবে। তবে আমি লগ-ইন শেল হিসেবেই fish ব্যবহার করছি। মাঝে মধ্যে টুকটাক কনফিগারেশন করতে হয়। এছাড়া আমার খুব একটা সমস্যা হচ্ছে না।

পরামর্শ ও কৌশল: fish ব্যবহার করে আরো দক্ষভাবে কাজ করুন

আপনি যদি fish শেলের ফিচারগুলো ব্যবহার করে অভ্যস্ত হয়ে থাকেন, তাহলে এই কৌশলগুলো আপনার শেলকে আরও স্মার্ট করবে এবং কাজের গতি বাড়িয়ে দিবে।

১. হিস্টোরি সার্চ আরও শক্তিশালী করুন

Ctrl + R ছাড়াও আপনি Up Arrow চেপে বর্তমান টাইপ করা টেক্সটের সাথে ম্যাচ করা পূর্ববর্তী কমান্ডগুলো ব্রাউজ করতে পারেন। কমান্ডের অংশ লিখে কিবোর্ডে উপরের তীর চিহ্ন চাপলেই শেল শুধু ম্যাচ করা কমান্ডগুলো দেখাবে।

২. Universal Variable দিয়ে কাস্টম সেটিংস সংরক্ষণ করুন

আপনার নিজের তৈরি সেটিংস স্থায়ীভাবে সংরক্ষণ করতে Universal Variable ব্যবহার করুন। যেমন, একটি কাস্টম প্রজেক্ট পাথ সেট করতে:

set -U MY_PROJECTS_PATH ~/projects

এবার যেকোনো fish সেশন থেকে echo $MY_PROJECTS_PATH করে এক্সেস করতে পারবেন। রিবুট করলেও এটি অক্ষত থাকবে।

৩. কমান্ডের সময়মাত্রা ট্র্যাক করুন

প্রতিটি কমান্ডের শেষে সেটি কতক্ষণ সময় নিলো তা প্রিন্ট করতে config.fish ফাইলে এই ফাংশনটি যোগ করুন:

function postexec_timer --on-event fish_postexec
if test $CMD_DURATION -gt 1000
set duration (math $CMD_DURATION / 1000)
echo "Duration: {$duration}s"
else if test $CMD_DURATION -gt 100
echo "Duration: {$CMD_DURATION}ms"
end
end

৪. ফাংশন তৈরি করে সাধারণ কাজগুলো অটোমেট করুন

একসাথে একাধিক ফোল্ডার তৈরি এবং সেখানে প্রবেশের জন্য ফাংশন:

function take --description "Create directory and enter it"
mkdir -p $argv
cd $argv
end

ব্যবহার: take new_project

৫. Abbreviations কে আরও কার্যকরীভাবে ব্যবহার করুন

Abbreviations ব্যবহার করে দৈনন্দিন কাজগুলো দ্রুতগতিতে করুন। আপনার বহূল ব্যবহৃত কমান্ডগুলোর Abbreviation বানিয়ে নিন। যেমন:

abbr --add ins "sudo pacman -S --noconfirm"
abbr --add rmv "sudo pacman -Rs"
abbr --add up "sudo pacman -Syu --noconfirm"
abbr --add gs "git status"
abbr --add gp "git push"
abbr --add gac "git add . && git commit -m "
abbr --add ll "ls -la"

এগুলো config.fish ফাইলে যোগ করলে স্থায়ী হবে এবং প্রতিবার পুরো কমান্ড লিখতে হবে না।

৬. ডিরেক্টরি হিস্টোরি দিয়ে দ্রুত নেভিগেশন

cd কমান্ড ছাড়াই দ্রুত ফোল্ডারে যাওয়া-আসা করতে পারেন:

  • cd - দিয়ে পূর্ববর্তী ডিরেক্টরিতে ফিরে যান
  • cdh কমান্ড দিয়ে ডিরেক্টরি হিস্টোরি দেখুন

সাধারণ সমস্যা ও সমাধান

১. Bash স্ক্রিপ্ট fish-এ কাজ করছে না

সমস্যা: bash এর স্ক্রিপ্ট fish এ syntax error দেখায়।

সমাধান:

# স্ক্রিপ্টে shebang line যুক্ত করে রান করুন
#!/bin/bash
echo "This script needs bash"
# অথবা সরাসরি bash দিয়ে রান করুন
bash script.sh

২. সিস্টেম কমান্ড কাজ করছে না

সমস্যা: কিছু সিস্টেম কমান্ড (যেমন systemctl, pacman) fish-এ কাজ করছে না।

সমাধান:

# Check current PATH
echo $PATH
# Reset PATH using your system's default
set -gx PATH /usr/local/bin /usr/bin /bin /usr/local/sbin /usr/sbin /sbin
# Or use fish_add_path to add missing directories
fish_add_path /missing/directory/path

৩. কমান্ড হিস্ট্রি পুরনো কমান্ড দেখাচ্ছে না

সমস্যা: fish চালু করার পরে অন্য সেশনের কমান্ড হিস্ট্রি দেখা যাচ্ছে না।

সমাধান:

history merge


fish শেল ব্যবহার করে আপনি প্রচুর সময় বাঁচাতে পারবেন এবং আপনার কমান্ড লাইন অভিজ্ঞতা আরও উপভোগ্য করতে পারবেন। এটি বিশেষভাবে যারা কমপ্লিশন, অটোসাজেশন এবং সিনট্যাক্স হাইলাইটিং এর মাধ্যমে দ্রুত কাজ করতে চান তাদের জন্য উপকারী। এই শেল সম্পর্কে বিস্তারিত জানতে তাদের ওয়েবসাইট ভিজিট করুন।

আপনার প্রিয় শেল কি? কমেন্টে জানান!


← আর্টিকেল তালিকায় ফিরে যান

এই লেখাটি সম্পর্কে আপনার অনুভূতি কী?