GNU/Linux >> Znalost Linux >  >> Linux

The Magic ~:Bash Tilde Expansion s 5 příklady

Shell Bash poskytuje některé proměnné, které mají předponu '~' (pojmenovaný tilde), které se říká Tilde Expansions.

Jsou to synonyma pro obsah jiných proměnných ve vašem shellu.

Expanze tildy je proces převodu těchto zkratek na názvy adresářů, které představují. V tomto článku se podíváme na funkci rozšíření vlnovky s příklady.

Rozšíření vlnovky se vztahuje na znaky '~' plus zahrnuje +, – a N (což je celé číslo) až po mezery nebo lomítko .

Rozšíření vlnovky se používá k rozšíření na několik konkrétních cest:

  • Domovské adresáře
  • Aktuální/předchozí pracovní adresář
  • Adresáře ze zásobníku adresářů.

Domovské adresáře

Rozšíření vlnovky poskytuje způsob, jak rozšířit domovský adresář aktuálního uživatele nebo domovský adresář daného uživatelského jména.

Syntax

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

~USER Expand to the home directory of the given username

Příklad 1. Domovská stránka současných uživatelů

Tilda(~) jako samostatné slovo se rozšíří na $HOME, pokud je definováno, pokud $HOME není definováno, pak se rozšíří o domovský adresář aktuálního uživatele.

Nyní je hodnota proměnné HOME /home/oracle, takže cd ~ změnil aktuální adresář na hodnotu $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 se změní na /sbin a cd ~ používá pouze $HOME, nikoli domovský adresář uživatele. Po zrušení nastavení hodnoty $HOME, cd ~ změnil adresář na hodnotu domovského adresáře nastaveného pro uživatele oracle v /etc/passwd. U rozšíření Tilde přepíše HOME skutečný domovský adresář.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

Příklad 2. Domovský adresář daného uživatele

Následující skript provede zálohu souboru protokolu, který má v názvu aktuální datum. Zaznamenává také počáteční a koncový čas do souboru s názvem backup.log v domovském adresáři uživatele oracle.

#! /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

Pokud dané uživatelské jméno neexistuje, pak se na nic nerozbalí. V následujícím příkladu není žádný uživatel s názvem ora. Takže ~ora se nerozšíří na /home/ora.

$ echo ~ora
~ora

V našem dřívějším článku se dozvíte, jak provést expanzi výztuhy v bash. tj. jak používat { } v bash.

Pracovní adresáře

Vlnovka s + a – se používají pro reprezentaci pracovních adresářů.

  • ~+ se rozšíří na hodnotu proměnné PWD, která obsahuje aktuální pracovní adresář.
  • ~- expanduje na hodnotu proměnné OLDPWD, která obsahuje předchozí pracovní adresář. Pokud není OLDPWD nastaveno, ~- se nerozbalí.

Příklad 3. Rozšíření starých/aktuálních pracovních adresářů

Následující příklad porovná soubor v aktuálním adresáři a předchozím pracovním adresáři.

$ 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
$

Ve výše uvedeném provedení:

  • ~+/gg.c se nahradí na /var/opt1/gg/gg.c
  • ~-/gg.c se nahradí na /var/opt/gg/gg.c

Tento článek je součástí probíhající série Bash Tutorial.

Rozšíření pro adresáře v zásobníku

Každý bash proces obsahuje objekt zásobníku, který lze použít ke sledování adresářů, které skript navštívil, zatímco zpracovává data obsahu adresáře.

Je to velmi jednoduchý mechanismus umožňující odkazovat na adresáře nebo se vrátit zpět do adresářů, které jste předtím navštívili. Expanze tildy také poskytuje rozšíření do adresářů v zásobníku adresářů.

  • ~+N Rozbalí N-tý adresář v zásobníku adresářů (počítá se zleva od seznamu vytištěného dirs při vyvolání bez možností), počínaje nulou.
  • ~-N Rozbalí N-tý adresář v zásobníku adresářů (počítá se zprava od seznamu vytištěného dirs při vyvolání bez možností), počínaje nulou.

Přečtěte si náš dřívější článek, abyste pochopili, jak používat příkazy dirs, pushd a popd k manipulaci se zásobníkem adresářů.

Příklad 4. Zobrazí N-tý adresář zleva pomocí ~+

V následujícím příkladu má zásobník adresářů 4 adresáře. ~+2 vám dává dostupnou cestu k adresáři na druhé pozici zleva začínající nulou.

$ dirs -v
 0  /sbin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

$ cd ~+2

$ pwd
/var/opt/GG/bin

Ale horní část zásobníku (nulová pozice) bude mít vždy aktuální adresář. Takže po provedení výše se v zásobníku adresářů zobrazí následující.

$  dirs -v
 0  /var/opt/GG/bin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

Příklad 5. Zobrazí N-tý adresář zprava pomocí ~-

Následuje podobný příklad jako výše. Ale vezme v úvahu adresáře ze spodní části zásobníku kvůli ~-.

$ 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

Linux
  1. Je možné předefinovat Tildu (‚~‘, domovský adresář)?

  2. Bash pole s příklady

  3. Bash If-Else prohlášení s příklady

  1. Použití –exclude With The Du Command?

  2. Je `~#` Tilde Expanze of Bash?

  3. Výukový program Ultimate Bash Array s 15 příklady

  1. Jak změním adresář v Git Bash pomocí Git pro Windows?

  2. '&&' vs. '&' s příkazem 'test' v Bash

  3. Jaký má smysl šifrování domovského adresáře?