बैश शेल कुछ वेरिएबल प्रदान करता है जो '~' (जिसका नाम टिल्ड है) के साथ उपसर्ग किया जाता है जिसे टिल्ड एक्सपेंशन कहा जाता है।
वे आपके शेल में अन्य चरों की सामग्री के पर्यायवाची हैं।
टिल्डे विस्तार इन संक्षिप्त रूपों को निर्देशिका नामों में परिवर्तित करने की प्रक्रिया है, जिसके लिए वे खड़े हैं। इस लेख में, आइए उदाहरणों के साथ टिल्ड विस्तार सुविधा की समीक्षा करें। ।
टिल्ड विस्तार का उपयोग कई विशिष्ट पथनामों में विस्तार करने के लिए किया जाता है:
- होम निर्देशिका
- वर्तमान/पिछली कार्यशील निर्देशिका
- निर्देशिका स्टैक से निर्देशिकाएँ।
होम निर्देशिकाएं
टिल्डे विस्तार वर्तमान उपयोगकर्ता की होम निर्देशिका या दिए गए उपयोगकर्ता नाम की होम निर्देशिका का विस्तार करने का एक तरीका प्रदान करता है।
Syntax ~ Expand to the variable $HOME or home directory of the current user ~USER Expand to the home directory of the given username
उदाहरण 1. वर्तमान उपयोगकर्ता होम
टिल्ड (~) एक अलग शब्द के रूप में, $HOME तक फैलता है यदि इसे परिभाषित किया जाता है, यदि $HOME परिभाषित नहीं है, तो यह वर्तमान उपयोगकर्ता की होम निर्देशिका के साथ विस्तारित होता है।
अब HOME चर का मान /home/oracle है इसलिए cd ~ ने वर्तमान निर्देशिका को $HOME के मान में बदल दिया है।
<केंद्र> केंद्र>## Logging into a oracle user, whose home directory is /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 उपयोक्ता के लिए निर्धारित होम निर्देशिका के मान में बदल दिया। टिल्डे विस्तार के लिए, होम वास्तविक होम निर्देशिका को ओवरराइड करता है।
[~]$ export HOME=/sbin [oracle]$ cd ~ [~]$ pwd /sbin [~]$ unset HOME [sbin]$ cd ~ [oracle]$ pwd /home/oracle
उदाहरण 2. दिए गए उपयोगकर्ता की होम निर्देशिका
निम्न स्क्रिप्ट उस लॉग फ़ाइल का बैकअप लेती है जिसके नाम में वर्तमान दिनांक है। यह ऑरैकल उपयोगकर्ता की होम निर्देशिका में बैकअप.लॉग नामक फ़ाइल में आरंभिक समय और समाप्ति समय को भी लॉग करता है।
#! /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 /home/ora तक विस्तृत नहीं होगा।
$ echo ~ora ~ora
बैश में ब्रेस एक्सपेंशन कैसे करें, यह समझने के लिए हमारे पहले के लेख को देखें। यानी बैश में { } का उपयोग कैसे करें।
कार्य निर्देशिकाएं
+ और - के साथ टिल्डे का उपयोग कार्यशील निर्देशिकाओं का प्रतिनिधित्व करने के लिए किया जाता है।
- ~+ पीडब्ल्यूडी वेरिएबल के मान तक विस्तारित होता है जिसमें वर्तमान कार्यशील निर्देशिका होती है।
- ~- 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 तक होता है
यह लेख चल रहे बैश ट्यूटोरियल श्रृंखला का हिस्सा है।
स्टैक में निर्देशिकाओं के लिए विस्तार
प्रत्येक बैश प्रक्रिया में एक स्टैक ऑब्जेक्ट होता है जिसका उपयोग निर्देशिका सामग्री के डेटा को संसाधित करते समय एक स्क्रिप्ट द्वारा देखी गई निर्देशिकाओं का ट्रैक रखने के लिए किया जा सकता है।
निर्देशिकाओं को संदर्भित करने या उन निर्देशिकाओं में वापस बदलने में सक्षम होने के लिए यह एक बहुत ही सरल तंत्र है जिसे पहले देखा गया था। टिल्डे विस्तार निर्देशिका स्टैक में निर्देशिकाओं को विस्तार भी प्रदान करता है।
- ~+N शून्य से शुरू करके निर्देशिका स्टैक में Nth निर्देशिका का विस्तार करता है (विकल्पों के बिना लागू होने पर dirs द्वारा मुद्रित सूची के बाईं ओर से गिनती)।
- ~-N शून्य से शुरू होकर निर्देशिका स्टैक में Nth निर्देशिका का विस्तार करता है (विकल्पों के बिना लागू होने पर dirs द्वारा मुद्रित सूची के दाईं ओर से गिनती)।
निर्देशिका स्टैक में हेरफेर करने के लिए dirs, pushd और popd कमांड का उपयोग करने के तरीके को समझने के लिए हमारे पिछले लेख की समीक्षा करें।
उदाहरण 4. ~+
. का उपयोग करके बाईं ओर से Nth निर्देशिका प्रदर्शित करता हैनिम्नलिखित उदाहरण में, निर्देशिका स्टैक में 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. ~-
. का उपयोग करके दाईं ओर से Nth निर्देशिका प्रदर्शित करता हैनिम्नलिखित उपरोक्त उदाहरण के समान है। लेकिन, ~-.
. के कारण स्टैक के नीचे से निर्देशिकाओं पर विचार करेंगे$ 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