কম্পিউটার

দ্য ম্যাজিক ~:5টি উদাহরণ সহ ব্যাশ টিল্ড এক্সপানশন

দ্য ম্যাজিক ~:5টি উদাহরণ সহ ব্যাশ টিল্ড এক্সপানশনব্যাশ শেল কিছু ভেরিয়েবল সরবরাহ করে যেগুলি '~' (টিল্ড নামক) এর সাথে প্রিফিক্স করা হয় যাকে টিল্ড এক্সপ্যানশন বলা হয়।

এগুলি আপনার শেলের মধ্যে থাকা অন্যান্য ভেরিয়েবলের বিষয়বস্তুর প্রতিশব্দ৷

Tilde সম্প্রসারণ হল এই সংক্ষিপ্ত রূপগুলিকে ডিরেক্টরির নামগুলিতে রূপান্তর করার প্রক্রিয়া যার জন্য তারা দাঁড়িয়েছে। এই নিবন্ধে, আসুন উদাহরণগুলির সাথে টিল্ড সম্প্রসারণ বৈশিষ্ট্যটি পর্যালোচনা করি৷

টিলড সম্প্রসারণ '~' প্লাস অক্ষরগুলিতে +, – এবং N (যা পূর্ণসংখ্যা) হোয়াইটস্পেস বা একটি স্ল্যাশ পর্যন্ত অন্তর্ভুক্ত করে প্রযোজ্য। .

টিল্ড সম্প্রসারণটি বেশ কয়েকটি নির্দিষ্ট পথনামে প্রসারিত করতে ব্যবহৃত হয়:

  • হোম ডিরেক্টরি
  • বর্তমান/পূর্ববর্তী কাজের ডিরেক্টরি
  • ডিরেক্টরি স্ট্যাক থেকে ডাইরেক্টরি।

হোম ডিরেক্টরি

Tilde সম্প্রসারণ বর্তমান ব্যবহারকারীর হোম ডিরেক্টরি বা প্রদত্ত ব্যবহারকারীর নামের হোম ডিরেক্টরি প্রসারিত করার একটি উপায় প্রদান করে।

Syntax

~ Expand to the variable $HOME or home directory of the current user

~USER Expand to the home directory of the given username

উদাহরণ 1. বর্তমান ব্যবহারকারীদের হোম

Tilde(~) একটি পৃথক শব্দ হিসাবে, এটি $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 ব্যবহারকারীর জন্য সেট করা হোম ডিরেক্টরির মানতে পরিবর্তন করে। Tilde সম্প্রসারণের জন্য, HOME আসল হোম ডিরেক্টরিকে ওভাররাইড করে।

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

উদাহরণ 2. প্রদত্ত ব্যবহারকারীর হোম ডিরেক্টরি

নিচের স্ক্রিপ্টটি একটি লগ ফাইলের ব্যাকআপ নেয় যার নামে বর্তমান তারিখ রয়েছে। এটি ওরাকল ব্যবহারকারীর হোম ডিরেক্টরিতে 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

বাশে ব্রেস সম্প্রসারণ কীভাবে করতে হয় তা বুঝতে আমাদের আগের নিবন্ধটি পড়ুন। অর্থাৎ কিভাবে ব্যাশে {} ব্যবহার করবেন।

ওয়ার্কিং ডিরেক্টরি

+ এবং – এর সাথে টিল্ড কাজ করা ডিরেক্টরিগুলিকে উপস্থাপন করার জন্য ব্যবহৃত হয়।

  • ~+ 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
  • এ প্রসারিত হয়

এই নিবন্ধটি চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ।

স্ট্যাকের মধ্যে ডিরেক্টরিগুলির জন্য সম্প্রসারণ

প্রতিটি ব্যাশ প্রক্রিয়ায় একটি স্ট্যাক অবজেক্ট থাকে যা ডিরেক্টরি বিষয়বস্তুর ডেটা প্রসেস করার সময় স্ক্রিপ্ট পরিদর্শন করা ডিরেক্টরিগুলির ট্র্যাক রাখতে ব্যবহার করা যেতে পারে৷

এটি একটি খুব সহজ পদ্ধতি যা ডিরেক্টরিগুলিকে রেফারেন্স করতে সক্ষম হতে বা আগে যে ডিরেক্টরিগুলি দেখেছিল সেগুলিতে ফিরে যেতে পারে৷ Tilde সম্প্রসারণ এছাড়াও ডিরেক্টরি স্ট্যাকের ডিরেক্টরির সম্প্রসারণ প্রদান করে।

  • ~+N ডিরেক্টরি স্ট্যাকের মধ্যে Nth ডিরেক্টরিকে প্রসারিত করে (অপশন ছাড়াই আহ্বান করা হলে তালিকার বাম দিক থেকে গণনা করা হয়), শূন্য দিয়ে শুরু করে।
  • ~-N ডাইরেক্টরি স্ট্যাকের মধ্যে Nth ডিরেক্টরিকে প্রসারিত করে (অপশন ছাড়াই আমন্ত্রণ জানানো হলে তালিকার ডান দিক থেকে গণনা করা হয়), শূন্য দিয়ে শুরু করে।

ডাইরেক্টরি স্ট্যাক ম্যানিপুলেট করার জন্য কীভাবে 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 - একটি সীমাবদ্ধ ব্যাশ শেল ব্যবহারিক উদাহরণ সহ ব্যাখ্যা করা হয়েছে

  2. লিনাক্সে ঘড়ির কমান্ড কীভাবে ব্যবহার করবেন, উদাহরণ সহ

  3. 6টি ব্যবহারিক উদাহরণ সহ ব্যাশ শেল ফাংশন টিউটোরিয়াল

  4. 15টি উদাহরণ সহ আলটিমেট ব্যাশ অ্যারে টিউটোরিয়াল