আমি নিজেকে একটি খুশি ব্যাশ ব্যবহারকারী বলে মনে করি। যাইহোক, যখন আমি ইউনিক্স এক্সপ্লোর করা শুরু করেছিলাম, সেটি একটি প্রপ্রায়েটারি ইউনিক্স সিস্টেম ছিল যা ডিফল্টভাবে tcsh প্রদান করত, তাই আমার শুরুর শেল অভিজ্ঞতা C শেল (csh)-এর একটি আধুনিক ভার্সনে ছিল। সেটি একটি সুফল সংযোগ বলে 밝혀 왜냐하면 tcsh পরে আমার ক্যারিয়ারের ফিল্ম স্টুডিওতে শেল অফ চয়েস ছিল।
আজও, অনেক টাস্ক আছে যা আমি tcsh-এর সাথে অ্যাসোসিয়েট করি, এমনকি সেখানে কোনো লজিক্যাল কোরিলেশন নেই। আমি এখনও কমপক্ষে একটি সিস্টেমে tcsh ব্যবহার করি, শুধু প্র্যাকটিসে থাকতে। আমি এটিকে আমার সব সিস্টেমে ইনস্টল করে রাখি আমার নিজস্ব tcsh স্ক্রিপ্টের সাথে কম্প্যাটিবিলিটি মেইনটেইন করতে এবং নিশ্চিত করতে যে আমি এটিকে লঞ্চ করতে পারি যখন আমাকে একটি স্ক্রিপ্ট লিখতে হয় যেটি আমি tcsh-এ পছন্দ করি।
C শেল এবং ব্যাশের পার্থক্য
Tcsh হলো csh-এর আধুনিক ধারাবাহিকতা। যখন C শেল ১৯৭৮-এ রিলিজ হয়েছিল, ব্যবহারকারীরা এর C-লাইক সিন্ট্যাক্সে এক্সাইটেড ছিলেন। C এক সময় একটি নতুন প্রোগ্রামিং ভাষা ছিল, এবং আরো গুরুত্বপূর্ণ, এটি ছিল যা یونিক্স লেখা হয়েছিল, তাই অধিকাংশ ইউনিক্স ব্যবহারকারী একটি আর্মিট্রারি স্ক্রিপ্টিং ভাষার চেয়ে C-এ বেশি কমফরটেবল ছিলেন। উদাহরণস্বরূপ, ব্যাশে, এই if লুপ test বাইনরিへ একটি "সিক্রেট" কল করে কন্ডিশনাল স্টেটমেন্ট ইভ্যালুয়েট করতে (ব্র্যাকেটের ভেতরের অংশ):
v=1
if [ $v -gt 0 ]
then
echo "verbose"
fi
এখানে csh বা tcsh-এ একই স্টেটমেন্ট, এক্সটার্নাল কল ছাড়া test-এ কারণ কন্ডিশনাল স্টেটমেন্ট (প্যারেন্থেসিসের কোড) csh-এর বিল্ট-ইন ইভ্যালুয়েশন ব্যবহার করে:
set v=1
if ($v > 1) then
echo "verbose"
endif
এটি কিছু জিনিস ডেমো করে, ভালো এবং খারাপ দুটোই। উদাহরণস্বরূপ, একটি C প্রোগ্রামারের জন্য প্যারেন্থেসিসে কন্ডিশনাল টাইপ করা স্বাভাবিক, এবং একটি প্রোগ্রামারের দৃষ্টিকোণ থেকে এক্সিকিউটেবলে ম্যাথ ইভ্যালুয়েশন বিল্ট-ইন থাকা ডیزirable। অন্যদিকে, if লুপ সিন্ট্যাক্সের Lua-এর সাথে বেশি মিল আছে বরং C-এর সাথে, যা ব্রেসেস ডিলিমিটার হিসেবে ব্যবহার করে:
// this does not work in Csh
if ( v>1 ) {
printf("verbose");
}
একভাবে, এটি csh-কে খুব ভালোভাবে সারমর্ম উপস্থাপন করে: এটি ক্লিন, ইফিশিয়েন্ট, এবং কিছুর জন্য পরিচিত, কিন্তু কোয়ার্কি এবং ইনকনসিস্টেন্ট।
তাহলে কেন এটি ব্যবহার করবেন?
নির্ভুলতার জন্য Tcsh
আমি C++ এবং জাভা বেশি লিখি C কোডের চেয়ে, তাই tcsh-এ আমার আগ্রহ এর ঐতিহাসিক দাবির সাথে немного শেয়ার করে। যাইহোক, আমি Lua উপভোগ করি, এবং একভাবে, আমি tcsh এবং অন্যান্য শেলগুলোকে Lua এবং পাইথন বা এমনকি মার্কডাউন এবং ডকবুক মতো চিন্তা করি। উভয় শেলের মেরিট আছে, এবং যেটি বেশি জনপ্রিয় সেটি পয়েন্ট আউট করা সহজ, কিন্তু অন্যটিতে একটি কঠোর স্পষ্টতা আছে। আসলে, আমি মনে করি tcsh-এ একটি প্রিসিশন আছে যা অনেক অন্যান্য শেলে নেই।
ভেরিয়েবল
শেলে টাইপড ভেরিয়েবলের লক্সারি আপনাকে মোলে না, কিন্তু tcsh-এ, আপনি কমপক্ষে একটি কীওয়ার্ড দিয়ে সেগুলো ডিক্লেয়ার করতে পারেন।奇怪的是, এই টাস্কের জন্য বেশ কিছু কীওয়ার্ড আপনি ব্যবহার করতে পারেন, কিন্তু যেটি আমি সেটল করলাম সেটি হলো set:
> set var=foo
> echo $var
foo
আপনি ভেরিয়েবল এক্সপ্যান্ড করতে পারেন ভেরিয়েবলের নাম টাইপ করে (var এই উদাহরণে) এবং তারপর Ctrl+X চাপুন এবং তারপর $ (ডলার) কী। উপরের উদাহরণটি var-কে foo-তে সেট করে।
অনেক অন্যান্য শেলের মতো, আপনি সব সেট ভেরিয়েবল লিস্ট করতে পারেন set একা কোনো আর্গুমেন্ট ছাড়া ব্যবহার করে:
> set
term xterm
tty pts/2
uid 1000
user seth
var foo
[...]
আপনি unset কমান্ড ব্যবহার করে একটি ভেরিয়েবল আনসেট করতে পারেন:
> unset var
> set | grep var
>
ফিচার নেই সেটিই একটি ফিচার
হয়তো আপনি স্ক্রিপ্টে এইরকম লাইন দেখেছেন:
var=GitLab
${var,,}
দ্বিতীয় লাইনটি var-এর কন্টেন্টকে লোয়ারকেসে ট্রান্সফর্ম করার একটি বিল্ট-ইন ফাংশন।
যদিও এই এক্সট্রা ফাংশনগুলো অসীমভাবে উপযোগী, আমি কখনো কখনো অনুভব করি সেগুলোオブফাসকেশনের একটি আমন্ত্রণ। শেল স্ক্রিপ্টিং প্রোগ্রামিং-এর HTML-এর মতো; এটি সেই കുറ entreprise সিরিয়াস ভাষাগুলোর একটি যা আপনি নিজে শিখতে পারেন শুধু অন্য লোকের কোড পড়ে। সেটি অবশ্যই এক্সট্রা ফাংশন ছাড়া যাওয়ার একটি চমৎকার কারণ নয়, কিন্তু এটিই কারণ আমি কিছু ক্রিপ্টিক শর্টহ্যান্ড এড়াতে চেষ্টা করি যেগুলো বিভিন্ন ভাষায় জনপ্রিয়। tcsh-এ লিখার সময়, আমার কমপ্লেক্স স্ট্রিং অপারেশন বিল্ট-ইন শর্টকাট দিয়ে করার অপশন নেই, সেগুলো বেসিক ইউনিক্স টুল দিয়ে করতে হয়। আমি মনে করি এর ফলাফল কোড যা পড়া সহজ, এবং এটা ভবিষ্যতের কন্ট্রিবিউটররা—এবং ভবিষ্যতের, ভুলনশীল আমি-এর জন্য বড় পার্থক্য তৈরি করে।
বিল্ট-ইন ম্যাথ
tcsh-র যা জিনিসটি আমি ভালোবাসি সেটি হলো এর বিল্ট-ইন @ ম্যাথ শর্টকাট। অধিকাংশ সেলফ-টought ইউনিক্স ব্যবহারকারীর মতো, আমি bc-র ওপর চেপে পড়েছি, এবং আমি সেটির জন্য খুব পछতावा করেছি। তার নিজস্ব কোনো ফল্ট ছাড়া, bc প্রায়শই ব্যবহারকারীদের কমান্ড-লাইন ক্যালকুলেটর হিসেবে শেখানো হয় যখন এটি আসলে একটি ক্যালকুলেশন ল্যাঙ্গুয়েজ-এর মতো আরও উপযোগী। ওয়ার্কঅরাউন্ডগুলো شامل: পিউর ব্যাশে অ্যামেজিং ৩০০-লাইন ক্যালকুলেটর, বা ব্যাশে let কমান্ড, বা tcsh-এ @ কমান্ড।
> @ n = ( 1 + 1 / 2 )
> echo $n
1
খুব জটিল ম্যাথের জন্য, bc বা একটি ভালো পাইথন ম্যাথেমেটিক্স লাইব্রেরি শিখা যাগ্য হতে পারে।
সব জরুরি ফিচার
আমার জন্য, tcsh সবও একটি পারফেক্ট ব্যালেন্স স্ট্রাইক করে কয়েক কয়েক সাদگی এবং জরুরি ফিচারের মধ্যে। এটি সব ব্যবহারকারীর জন্য বা এমনকি সব উদ্দেশ্যের জন্য একটি শেল নয়, কিন্তু আপনি যদি আপনার টেক্সট-ভিত্তিক বিশ্বের ভিউ সিম্পলিফাই করতে খুঁজছেন, tcsh একটি আকর্ষণীয় বিকল্প প্রদান করতে পারে।