Bash शेल कुछ वेरिएबल्स प्रदान करता है जो '~' (टिल्ड नामक) से उपसर्गित होते हैं जिन्हें टिल्ड विस्तार कहा जाता है।
वे आपके शेल के भीतर अन्य वेरिएबल्स की सामग्री के पर्याय हैं।
टिल्ड विस्तार इन संक्षिप्ताक्षरों को उन निर्देशिका नामों में परिवर्तित करने की प्रक्रिया है जिनके लिए वे खड़े हैं। इस लेख में, आइए उदाहरणों के साथ टिल्ड विस्तार सुविधा की समीक्षा करें।
टिल्ड विस्तार '~' प्लस वर्णों पर लागू होता है जिसमें +, - और N (जो पूर्णांक है) व्हाइटस्पेस या स्लैश तक शामिल हैं।
टिल्ड विस्तार कई विशिष्ट पथनामों तक विस्तार करने के लिए उपयोग किया जाता है:
- होम निर्देशिकाएं
- वर्तमान/पिछली कार्य निर्देशिका
- निर्देशिका स्टैक से निर्देशिकाएं।
होम निर्देशिकाएं
टिल्ड विस्तार वर्तमान उपयोगकर्ता की होम निर्देशिका या दिए गए उपयोगकर्ता नाम की होम निर्देशिका का विस्तार करने का एक तरीका प्रदान करता है।
सिंटैक्स ~ $HOME वेरिएबल या वर्तमान उपयोगकर्ता की होम निर्देशिका तक विस्तार करता है ~USER दिए गए उपयोगकर्ता नाम की होम निर्देशिका तक विस्तार करता है
उदाहरण 1. वर्तमान उपयोगकर्ता की होम
टिल्ड(~) एक अलग शब्द के रूप में, $HOME तक विस्तारित होता है यदि यह परिभाषित है, यदि $HOME परिभाषित नहीं है, तो यह वर्तमान उपयोगकर्ता की होम निर्देशिका के साथ विस्तारित होता है।
अब HOME वेरिएबल का मान /home/oracle है इसलिए cd ~ ने वर्तमान निर्देशिका को $HOME के मान में बदल दिया।
## oracle उपयोगकर्ता में लॉगिन करना, जिसकी होम निर्देशिका /home/oracle है # su oracle [tmp]$ pwd /tmp [tmp]$ echo $HOME /home/oracle [tmp]$ cd ~ [~]$ pwd /home/oracle
HOME को /sbin में बदल दिया गया है, और cd ~ केवल $HOME का उपयोग करता है न कि उपयोगकर्ता की होम निर्देशिका का। $HOME के मान को अनसेट करने के बाद, cd ~ निर्देशिका को /etc/passwd में oracle उपयोगकर्ता के लिए सेट होम निर्देशिका के मान में बदल देता है। टिल्ड विस्तार के लिए, HOME वास्तविक होम निर्देशिका को ओवरराइड करता है।
[~]$ export HOME=/sbin [oracle]$ cd ~ [~]$ pwd /sbin [~]$ unset HOME [sbin]$ cd ~ [oracle]$ pwd /home/oracle
उदाहरण 2. दिए गए उपयोगकर्ता की होम निर्देशिका
निम्नलिखित स्क्रिप्ट वर्तमान तिथि के साथ नाम में एक लॉग फ़ाइल का बैकअप लेती है। यह प्रारंभ समय और अंत समय को oracle उपयोगकर्ता की होम निर्देशिका में backup.log नामक फ़ाइल में लॉग करता है।
#! /bin/bash echo "Initiating the backup at `date`" >> ~oracle/backup.log da=`date +%F` cp $da.log{,.bak} echo "END BACKUP at `date`" >> ~oracle/backup.log $ ls -l /home/oracle/ total 8 -rw-r--r-- 1 root root 99 Jun 4 14:23 backup.log
यदि दिया गया उपयोगकर्ता नाम मौजूद नहीं है तो यह किसी चीज़ तक विस्तारित नहीं होता। निम्नलिखित उदाहरण में, ora नामक कोई उपयोगकर्ता नहीं है। इसलिए, ~ora /home/ora तक विस्तारित नहीं होगा।
$ echo ~ora ~ora
bash में ब्रेस विस्तार कैसे करें, यह समझने के लिए हमारे पहले के लेख देखें। यानी bash में { } का उपयोग कैसे करें।
कार्य निर्देशिकाएं
टिल्ड + और - के साथ कार्य निर्देशिकाओं का प्रतिनिधित्व करने के लिए उपयोग किया जाता है।
- ~+ PWD वेरिएबल के मान तक विस्तारित होता है जिसमें वर्तमान कार्य निर्देशिका होती है।
- ~- OLDPWD वेरिएबल के मान तक विस्तारित होता है, जिसमें पिछली कार्य निर्देशिका होती है। यदि OLDPWD अनसेट है, तो ~- विस्तारित नहीं होता।
उदाहरण 3. पुरानी/वर्तमान कार्य निर्देशिकाओं का विस्तार
निम्नलिखित उदाहरण वर्तमान निर्देशिका और पिछली कार्य निर्देशिका में फ़ाइल की तुलना करेगा।
$ cat comp.sh #! /bin/bash set -x cd /var/opt/gg if [ -f gg.c ] then echo "File1 exists" fi cd /var/opt1/gg if [ -f gg.c ] then echo "File2 exists" cmp ~+/gg.c ~-/gg.c fi $ ./comp.sh + cd /var/opt/gg + '[' -f gg.c ']' + echo 'File1 exists' File1 exists + cd /var/opt1/gg + '[' -f gg.c ']' + echo 'File2 exists' File2 exists + cmp /var/opt1/gg/gg.c /var/opt/gg/gg.c cmp: EOF on /var/opt1/gg/gg.c $
उपरोक्त निष्पादन में:
- ~+/gg.c /var/opt1/gg/gg.c तक विस्तारित होता है
- ~-/gg.c /var/opt/gg/gg.c तक विस्तारित होता है
यह लेख चल रही Bash ट्यूटोरियल सीरीज़ का हिस्सा है।
स्टैक में निर्देशिकाओं के लिए विस्तार
प्रत्येक bash प्रक्रिया में एक स्टैक ऑब्जेक्ट होता है जिसका उपयोग उन निर्देशिकाओं का ट्रैक रखने के लिए किया जा सकता है जिन पर स्क्रिप्ट ने निर्देशिका सामग्री के डेटा को संसाधित करते समय दौरा किया था।
यह उन निर्देशिकाओं को संदर्भित करने या उन निर्देशिकाओं पर वापस बदलने में सक्षम होने के लिए एक बहुत ही सरल तंत्र है जिन पर पहले दौरा किया गया था। टिल्ड विस्तार निर्देशिका स्टैक में निर्देशिकाओं के विस्तार को भी प्रदान करता है।
- ~+N निर्देशिका स्टैक में Nवीं निर्देशिका का विस्तार करता है (dirs द्वारा प्रिंट की गई सूची के बाएं से गिनती, जब बिना विकल्पों के आमंत्रित किया जाता है), शून्य से शुरू होता है।
- ~-N निर्देशिका स्टैक में Nवीं निर्देशिका का विस्तार करता है (dirs द्वारा प्रिंट की गई सूची के दाएं से गिनती, जब बिना विकल्पों के आमंत्रित किया जाता है), शून्य से शुरू होता है।
निर्देशिका स्टैक में हेरफेर करने के लिए dirs, pushd और popd कमांड्स का उपयोग कैसे करें, यह समझने के लिए हमारे पहले के लेख देखें।
उदाहरण 4. ~+ का उपयोग करके बाएं से Nवीं निर्देशिका प्रदर्शित करता है
निम्नलिखित उदाहरण में, निर्देशिका स्टैक में 4 निर्देशिकाएं हैं। ~+2 आपको शून्य से शुरू होने वाले बाएं से दूसरी स्थिति में उपलब्ध निर्देशिका पथ देता है।
$ dirs -v 0 /sbin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~+2 $ pwd /var/opt/GG/bin
लेकिन स्टैक का शीर्ष (शून्य स्थिति) में हमेशा वर्तमान निर्देशिका होगी। इसलिए उपरोक्त निष्पादन के बाद, निर्देशिका स्टैक में निम्नलिखित दिखाया गया है।
$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root
उदाहरण 5. ~- का उपयोग करके दाएं से Nवीं निर्देशिका प्रदर्शित करता है
निम्नलिखित उपरोक्त उदाहरण के समान है। लेकिन, ~- के कारण निर्देशिकाओं को स्टैक के नीचे से माना जाएगा।
$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~-2 $ pwd /var/opt/midas $ dirs -v 0 /var/opt/midas 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root