मैं खुद को एक खुश बैश उपयोगकर्ता मानता हूं। हालाँकि, जब मैंने यूनिक्स की खोज शुरू की, तो यह एक मालिकाना यूनिक्स सिस्टम पर था जो डिफ़ॉल्ट रूप से tcsh प्रदान करता था, इसलिए मेरे शुरुआती शेल अनुभव C शेल (csh) के आधुनिक संस्करण पर थे। यह एक भाग्यशाली दुर्घटना साबित हुई क्योंकि tcsh फिल्म स्टूडियो में भी पसंद का खोल था जहां मैंने अपने करियर में बाद में काम किया।
आज तक, ऐसे कई कार्य हैं जिन्हें मैं tcsh से जोड़ता हूं, भले ही वहां कोई तार्किक संबंध नहीं है। मैं अभी भी कम से कम एक सिस्टम पर tcsh का उपयोग करता हूं, यदि केवल अभ्यास में रहना है। मैं अपनी tcsh स्क्रिप्ट के साथ संगतता बनाए रखने के लिए इसे अपने सभी सिस्टम पर स्थापित रखता हूं और यह सुनिश्चित करने के लिए कि मैं इसे तब लॉन्च कर सकता हूं जब मुझे एक स्क्रिप्ट लिखने की आवश्यकता होती है जिसे मैं tcsh में रखना पसंद करता हूं।
सी शेल और बैश के बीच अंतर
Tcsh csh की आधुनिक निरंतरता है। जब 1978 में C शेल को रिलीज़ किया गया, तो उपयोगकर्ता इसके C- जैसे सिंटैक्स को लेकर उत्साहित थे। सी उस समय एक नई प्रोग्रामिंग भाषा थी, और इससे भी महत्वपूर्ण बात यह थी कि यूनिक्स में लिखा गया था, इसलिए अधिकांश यूनिक्स उपयोगकर्ता मनमानी स्क्रिप्टिंग भाषा की तुलना में सी के साथ अधिक सहज थे। उदाहरण के लिए, बैश में, यह 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
लूप सिंटैक्स में C की तुलना में Lua के साथ अधिक समानता है, जो सीमांकक के रूप में ब्रेसिज़ का उपयोग करता है:
// this does not work in Csh
if ( v>1 ) {
printf("verbose");
}
एक तरह से, यह अच्छी तरह से csh को सारांशित करता है:यह कुछ के लिए साफ, कुशल और परिचित है, लेकिन विचित्र और असंगत है।
तो इसका इस्तेमाल क्यों करें?
परिशुद्धता के लिए 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
बहुत जटिल गणित के लिए, यह बीसी या एक अच्छी पायथन गणित पुस्तकालय सीखने लायक हो सकता है।
सभी आवश्यक
मेरे लिए, tcsh स्पष्ट सादगी और आवश्यक सुविधाओं के बीच एक आदर्श संतुलन बनाता है। यह सभी उपयोगकर्ताओं के लिए, या यहां तक कि सभी उद्देश्यों के लिए एक शेल नहीं है, लेकिन यदि आप अपनी टेक्स्ट-आधारित दुनिया के बारे में अपने दृष्टिकोण को सरल बनाना चाहते हैं, तो tcsh एक दिलचस्प विकल्प प्रदान कर सकता है।