Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

द मैजिक ~:5 उदाहरणों के साथ बैश टिल्डे एक्सपेंशन

द मैजिक ~:5 उदाहरणों के साथ बैश टिल्डे एक्सपेंशनबैश शेल कुछ वेरिएबल प्रदान करता है जो '~' (जिसका नाम टिल्ड है) के साथ उपसर्ग किया जाता है जिसे टिल्ड एक्सपेंशन कहा जाता है।

वे आपके शेल में अन्य चरों की सामग्री के पर्यायवाची हैं।

टिल्डे विस्तार इन संक्षिप्त रूपों को निर्देशिका नामों में परिवर्तित करने की प्रक्रिया है, जिसके लिए वे खड़े हैं। इस लेख में, आइए उदाहरणों के साथ टिल्ड विस्तार सुविधा की समीक्षा करें। ।

टिल्ड विस्तार का उपयोग कई विशिष्ट पथनामों में विस्तार करने के लिए किया जाता है:

  • होम निर्देशिका
  • वर्तमान/पिछली कार्यशील निर्देशिका
  • निर्देशिका स्टैक से निर्देशिकाएँ।

होम निर्देशिकाएं

टिल्डे विस्तार वर्तमान उपयोगकर्ता की होम निर्देशिका या दिए गए उपयोगकर्ता नाम की होम निर्देशिका का विस्तार करने का एक तरीका प्रदान करता है।

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

  1. rbash - एक प्रतिबंधित बैश शेल व्यावहारिक उदाहरणों के साथ समझाया गया

    लिनक्स शेल सबसे आकर्षक और शक्तिशाली में से एक है GNU /लिनक्स संचालित उपकरण। X . सहित सभी एप्लिकेशन , शेल के ऊपर बनाया गया है और लिनक्स शेल इतना शक्तिशाली है कि इसका उपयोग करके पूरे लिनक्स सिस्टम को ठीक से नियंत्रित किया जा सकता है। लिनक्स शेल का दूसरा पहलू यह है कि, यह संभावित रूप से हानिकारक हो सकत

  1. उदाहरण के साथ, लिनक्स में वॉच कमांड का उपयोग कैसे करें

    लिनक्स में वॉच कमांड एक काम करता है - एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहां इसका उपयोग करने का तरीका बताया गया है। कमांड सिंटैक्स देखें वॉच कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: विकल्प नीचे दी गई तालिका

  1. बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

    बैश शेल फ़ंक्शन समूह के लिए एकल नाम का उपयोग करके बाद में निष्पादन के लिए कई UNIX / Linux कमांड को समूहबद्ध करने का एक तरीका है। . बैश शेल फ़ंक्शन को नियमित यूनिक्स कमांड की तरह ही निष्पादित किया जा सकता है। शेल फ़ंक्शंस को मौजूदा शेल संदर्भ में उनकी व्याख्या करने के लिए कोई नई प्रक्रिया बनाए बिना न