আমি নিজেকে একজন সুখী ব্যাশ ব্যবহারকারী মনে করি। যাইহোক, যখন আমি ইউনিক্স অন্বেষণ শুরু করি, তখন এটি একটি মালিকানাধীন ইউনিক্স সিস্টেমে ছিল যা ডিফল্টরূপে tcsh প্রদান করে, তাই আমার প্রথম শেল অভিজ্ঞতাগুলি C শেল (csh) এর একটি আধুনিক সংস্করণে ছিল। এটি একটি সৌভাগ্যজনক দুর্ঘটনা হিসাবে পরিণত হয়েছিল কারণ আমি আমার ক্যারিয়ারের পরে যেখানে কাজ করেছি সেখানেও tcsh ছিল ফিল্ম স্টুডিওতে পছন্দের শেল।
আজ অবধি, আমি tcsh-এর সাথে যুক্ত করেছি বেশ কিছু কাজ, যদিও সেখানে কোনো যৌক্তিক সম্পর্ক নেই। আমি এখনও অন্তত একটি সিস্টেমে tcsh ব্যবহার করি, শুধুমাত্র অনুশীলনে থাকার জন্য। আমার নিজস্ব tcsh স্ক্রিপ্টগুলির সাথে সামঞ্জস্য বজায় রাখতে এবং আমি যখন tcsh-এ থাকা পছন্দ করি এমন একটি স্ক্রিপ্ট লিখতে হলে আমি এটি চালু করতে পারি তা নিশ্চিত করার জন্য আমি এটিকে আমার সমস্ত সিস্টেমে ইনস্টল করে রাখি৷
সি শেল এবং ব্যাশের মধ্যে পার্থক্য
Tcsh হল csh-এর আধুনিক ধারাবাহিকতা। 1978 সালে যখন সি শেলটি মুক্তি পেয়েছিল, ব্যবহারকারীরা এর সি-এর মতো সিনট্যাক্স নিয়ে উত্তেজিত হয়েছিল। সেই সময়ে সি ছিল একটি নতুন প্রোগ্রামিং ভাষা, এবং আরও গুরুত্বপূর্ণ, ইউনিক্সে এটিই লেখা ছিল, তাই বেশিরভাগ ইউনিক্স ব্যবহারকারীরা একটি নির্বিচারে স্ক্রিপ্টিং ভাষার চেয়ে সি নিয়ে বেশি স্বাচ্ছন্দ্য বোধ করেছিলেন। উদাহরণস্বরূপ, ব্যাশে, এই if
লুপ test
-এ একটি "গোপন" কল করে শর্তসাপেক্ষ বিবৃতি মূল্যায়ন করার জন্য বাইনারি (বন্ধনীতে অংশ):
v=1
if [ $v -gt 0 ]
then
echo "verbose"
fi
test
করার জন্য বহিরাগত কল ছাড়াই এখানে csh বা tcsh-এ একই বিবৃতি রয়েছে কারণ শর্তসাপেক্ষ বিবৃতি (বন্ধনীতে কোড) csh এর অন্তর্নির্মিত মূল্যায়ন ব্যবহার করে:
set v=1
if ($v > 1) then
echo "verbose"
endif
এটি ভাল এবং খারাপ উভয়ই কিছু জিনিস প্রদর্শন করে। উদাহরণস্বরূপ, একজন সি প্রোগ্রামারের জন্য বন্ধনীতে একটি শর্তসাপেক্ষ টাইপ করা স্বাভাবিক, এবং এটি একটি প্রোগ্রামারের দৃষ্টিকোণ থেকে গণিত মূল্যায়ন নির্বাহযোগ্য মধ্যে তৈরি করা বাঞ্ছনীয়। অন্যদিকে, if
লুপ সিনট্যাক্সের সাথে সি এর চেয়ে বেশি মিল রয়েছে, যেটি সীমাবদ্ধকারী হিসাবে ধনুর্বন্ধনী ব্যবহার করে:
// this does not work in Csh
if ( v>1 ) {
printf("verbose");
}
একটি উপায়ে, এটি সুন্দরভাবে csh যোগ করে:এটি পরিষ্কার, দক্ষ, এবং কারও কারও কাছে পরিচিত, কিন্তু অদ্ভুত এবং অসঙ্গত৷
তাহলে কেন এটি ব্যবহার করবেন?
নির্ভুলতার জন্য Tcsh
আমি C কোডের চেয়ে বেশি C++ এবং Java লিখি, তাই tcsh-এ আমার আগ্রহ তার ঐতিহাসিক দাবির খ্যাতির সাথে সামান্যই শেয়ার করে। যাইহোক, আমি লুয়া উপভোগ করি, এবং একভাবে, আমি tcsh এবং অন্যান্য শেলগুলির কথা ভাবি যেমন আমি লুয়া এবং পাইথন বা এমনকি মার্কডাউন এবং ডকবুকের কথা ভাবি। উভয় শেলেরই যোগ্যতা রয়েছে এবং যেটি বেশি জনপ্রিয় তা নির্দেশ করা সহজ, তবে অন্যটির প্রতি কঠোর স্পষ্টতা রয়েছে। আসলে, আমি মনে করি 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 এর মত; এটি এমন কয়েকটি গুরুতর ভাষার মধ্যে একটি যা আপনি কেবল অন্য লোকেদের কোড পড়ে নিজেকে শেখাতে পারেন। দরকারী ফাংশনগুলি ছেড়ে দেওয়ার জন্য এটি অগত্যা একটি দুর্দান্ত কারণ নয়, তবে এই কারণেই আমি বিভিন্ন ভাষায় জনপ্রিয় কিছু গোপন সংক্ষিপ্ত বিবরণ এড়াতে চেষ্টা করি। tcsh-এ লেখার সময়, আমার কাছে যতটা শর্টহ্যান্ড ব্যবহার করার বিকল্প নেই, তাই জটিল স্ট্রিং অপারেশনগুলি অন্তর্নির্মিত শর্টকাটগুলির পরিবর্তে মৌলিক ইউনিক্স সরঞ্জামগুলির সাথে সঞ্চালিত হওয়া উচিত। আমি বিশ্বাস করি এটি এমন কোডের ফলস্বরূপ যা পড়া সহজ, এবং এটি ভবিষ্যতের অবদানকারীদের-এবং ভবিষ্যতে, ভুলে যাওয়া আমাকে-এর জন্য একটি বড় পার্থক্য করে .
বিল্ট-ইন গণিত
tcsh সম্পর্কে আমি যে জিনিসগুলি পছন্দ করি তার মধ্যে একটি হল এর অন্তর্নির্মিত @ গণিত শর্টকাট। বেশিরভাগ স্ব-শিক্ষিত ইউনিক্স ব্যবহারকারীদের মতো, আমি বিসি-তে হোঁচট খেয়েছি, এবং তখন থেকেই আমি অনুতপ্ত হয়েছি। নিজস্ব কোনো দোষ ছাড়াই, bc প্রায়ই একটি কমান্ড-লাইন ক্যালকুলেটর হিসাবে ব্যবহারকারীদের শেখানো হয় যখন এটি প্রকৃতপক্ষে একটি গণনা ভাষা হিসাবে আরও উপযুক্ত। . কর্মক্ষেত্রে বিশুদ্ধ ব্যাশে একটি আশ্চর্যজনক 300-লাইন ক্যালকুলেটর বা লেট অন্তর্ভুক্ত রয়েছে ব্যাশে কমান্ড, অথবা @ tcsh-এ কমান্ড।
> @ n = ( 1 + 1 / 2 )
> echo $n
1
খুব জটিল গণিতের জন্য, এটি bc বা একটি ভাল পাইথন গণিত লাইব্রেরি শেখার মূল্য হতে পারে।
সব প্রয়োজনীয় জিনিস
আমার জন্য, tcsh সম্পূর্ণ সরলতা এবং প্রয়োজনীয় বৈশিষ্ট্যগুলির মধ্যে একটি নিখুঁত ভারসাম্য বজায় রাখে। এটি সমস্ত ব্যবহারকারীর জন্য বা এমনকি সমস্ত উদ্দেশ্যে একটি শেল নয়, তবে আপনি যদি আপনার পাঠ্য-ভিত্তিক বিশ্ব সম্পর্কে আপনার দৃষ্টিভঙ্গি সহজ করতে চান তবে tcsh একটি আকর্ষণীয় বিকল্প প্রদান করতে পারে৷