GNU/Linux >> Linux Esercitazione >  >> Linux

Come convertire .. in nomi di percorso in nome assoluto in uno script bash?

Prova:

ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)

Quello che stai cercando è readlink :

absolute_path=$(readlink -m /home/nohsib/dvc/../bop)

Nota: Devi usare readlink di GNU implementazione che offre l'opzione "-m". readlink di BSD per esempio no.


Se vuoi farlo senza seguire alcun collegamento simbolico, prova a utilizzare realpath con l'opzione -s :

$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop

Nota che con realpath , normalmente devono esistere tutti tranne l'ultimo componente. Quindi, affinché quanto sopra funzioni, quanto segue deve essere presente nel file system:

/home
/home/nohsib
/home/nohsib/dvc

Ma puoi ignorare tale requisito utilizzando il -m opzione.

$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop

(Nota realpath non è disponibile su tutti i sistemi, specialmente sui vecchi sistemi non Debian. Per coloro che lavorano su Linux embedded, sfortunatamente Busybox realpath non supporta il -s o -m interruttori.)


Un problema con l'utilizzo di :

ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)

è che se ${possibleDirectory} non esiste, ABSOLUTE_PATH verrà quindi impostato sulla directory corrente. Che probabilmente NON è quello che vuoi o ti aspetti.

Penso che l'utilizzo di questa versione possa essere più desiderabile in generale:

ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)

Se ${possibleDirectory} non esiste o non è accessibile, a causa di permessi di accesso alla directory mancanti, ABSOLUTE_PATH conterrà la stringa vuota.

Il vantaggio di questo è che puoi quindi testare la stringa vuota o lasciarla fallire naturalmente, a seconda delle circostanze. L'impostazione predefinita della directory corrente nel caso di un comando 'cd' non riuscito può portare a risultati molto inaspettati e possibilmente disastrosi (ad es. rm -rf "$ABSOLUTE_PATH" )


Linux
  1. Come impostare i parametri quando Pipe Bash Script su Bash?

  2. Come dividere una stringa nello script Bash

  3. Come sostituire gli spazi nei nomi dei file usando uno script bash

  4. Nello script Python, come imposto PYTHONPATH?

  5. Come includere un file in uno script di shell bash

Come scrivere uno script Bash con esempi

Come eseguire uno script Bash

Come posso controllare la sintassi di uno script Bash senza eseguirlo?

Come ottenere il percorso completo di un file?

Aggiungi uno script bash al percorso

Come eseguire uno script bash?