La shell Bash fornisce alcune variabili che sono precedute da '~' (denominate tilde), chiamate Tilde Expansions.
Sono sinonimi di contenuti di altre variabili all'interno della tua shell.
L'espansione di Tilde è il processo di conversione di queste abbreviazioni nei nomi delle directory che rappresentano. In questo articolo, esaminiamo la funzione di espansione della tilde con gli esempi.
L'espansione della tilde si applica ai caratteri '~' più include +, – e N (che è un numero intero) fino a spazi bianchi o una barra .
L'espansione tilde viene utilizzata per espandersi a diversi percorsi specifici:
- Elenchi principali
- Directory di lavoro attuale/precedente
- Directory dallo stack di directory.
Elenchi principali
L'espansione di Tilde fornisce un modo per espandere la directory home dell'utente corrente o la directory home del nome utente specificato.
Syntax ~ Expand to the variable $HOME or home directory of the current user ~USER Expand to the home directory of the given username
Esempio 1. Home degli utenti correnti
Tilde(~) come parola separata, si espande in $HOME se è definita, se $HOME non è definita, si espande con la directory home dell'utente corrente.
Ora il valore della variabile HOME è /home/oracle, quindi cd ~ ha cambiato la directory corrente nel valore di $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 viene modificato in /sbin e cd ~ utilizza solo $HOME non la directory home dell'utente. Dopo aver deimpostato il valore di $HOME, cd ~ ha cambiato la directory nel valore della directory home impostata per l'utente Oracle in /etc/passwd. Per l'espansione di Tilde, HOME sovrascrive la vera home directory.
[~]$ export HOME=/sbin [oracle]$ cd ~ [~]$ pwd /sbin [~]$ unset HOME [sbin]$ cd ~ [oracle]$ pwd /home/oracle
Esempio 2. Directory principale dell'utente specificato
Lo script seguente esegue il backup di un file di registro con la data corrente nel nome. Registra anche l'ora di inizio e l'ora di fine nel file chiamato backup.log nella home directory dell'utente 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
Se il nome utente specificato non esiste, non si espande in qualcosa. Nell'esempio seguente non è presente alcun utente chiamato ora. Quindi, ~ora non si espanderà in /home/ora.
$ echo ~ora ~ora
Fare riferimento al nostro articolo precedente per capire come eseguire l'espansione delle parentesi graffe in bash. cioè come usare { } in bash.
Directory di lavoro
Tilde con + e – sono usati per rappresentare le directory di lavoro.
- ~+ si espande al valore della variabile PWD che contiene la directory di lavoro corrente.
- ~- si espande al valore della variabile OLDPWD, che contiene la directory di lavoro precedente. Se OLDPWD non è impostato, ~- non viene espanso.
Esempio 3. Espansione di directory di lavoro vecchie/attuale
L'esempio seguente confronterà il file nella directory corrente e la directory di lavoro precedente.
$ 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 $
Nell'esecuzione di cui sopra:
- ~+/gg.c si espande in /var/opt1/gg/gg.c
- ~-/gg.c si espande in /var/opt/gg/gg.c
Questo articolo fa parte della serie in corso di Bash Tutorial.
Espansione per le directory nello stack
Ciascun processo bash contiene un oggetto stack che può essere utilizzato per tenere traccia delle directory che uno script ha visitato durante l'elaborazione dei dati del contenuto delle directory.
È un meccanismo molto semplice per poter fare riferimento a directory o per tornare alle directory visitate in precedenza. L'espansione di Tilde fornisce anche l'espansione alle directory nello stack di directory.
- ~+N Espande l'ennesima directory nello stack di directory (contando da sinistra dell'elenco stampato da dirs quando viene richiamato senza opzioni), partendo da zero.
- ~-N Espande l'ennesima directory nello stack di directory (contando da destra dell'elenco stampato da dirs quando viene richiamato senza opzioni), a partire da zero.
Consulta il nostro articolo precedente per capire come utilizzare i comandi dirs, pushd e popd per manipolare lo stack di directory.
Esempio 4. Visualizza l'ennesima directory da sinistra usando ~+
Nell'esempio seguente, lo stack di directory ha 4 directory. ~+2 ti dà il percorso della directory disponibile nella seconda posizione da sinistra a partire da zero.
$ dirs -v 0 /sbin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~+2 $ pwd /var/opt/GG/bin
Ma in cima allo stack (posizione zero) avrà sempre la directory corrente. Quindi, dopo l'esecuzione di cui sopra, nello stack di directory viene mostrato quanto segue.
$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root
Esempio 5. Visualizza l'ennesima directory da destra usando ~-
Di seguito è simile all'esempio sopra. Ma prenderà in considerazione le directory dal fondo dello stack a causa di ~-.
$ 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