GNU/Linux >> Znalost Linux >  >> Linux

Jak převést .. v názvech cest na absolutní název v bash skriptu?

Zkuste:

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

To, co hledáte, je readlink :

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

Poznámka: Musíte použít readlink GNU implementace, která nabízí možnost "-m". BSD readlink například ne.


Pokud to chcete udělat bez následování jakýchkoli symbolických odkazů, zkuste použít realpath s možností -s :

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

Všimněte si, že s realpath , normálně musí existovat všechny komponenty kromě poslední. Aby výše uvedené fungovalo, musí být v systému souborů přítomno následující:

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

Tento požadavek však můžete obejít pomocí -m možnost.

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

(Poznámka realpath není k dispozici na všech systémech, zejména na starších systémech mimo Debian. Pro ty, kteří pracují na embedded Linuxu, bohužel Busybox realpath nepodporuje -s nebo -m přepínače.)


Jeden problém s používáním :

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

je, že pokud ${possibleDirectory} neexistuje, bude ABSOLUTE_PATH nastavena na aktuální adresář. Což pravděpodobně NENÍ to, co chcete nebo očekáváte.

Myslím, že použití této verze může být obecně více žádoucí:

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

Pokud ${possibleDirectory} neexistuje nebo není přístupný z důvodu chybějících oprávnění k přístupu k adresáři, bude ABSOLUTE_PATH obsahovat prázdný řetězec.

Výhodou je, že pak můžete v závislosti na okolnostech otestovat prázdný řetězec nebo jej nechat přirozeně selhat. Výchozí nastavení aktuálního adresáře v případě selhání příkazu 'cd' může vést k velmi neočekávaným a možná katastrofálním výsledkům (např. rm -rf "$ABSOLUTE_PATH" )


Linux
  1. Jak nastavit parametry, když Pipe Bash Script to Bash?

  2. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?

  3. Jak rozdělit řetězec ve skriptu Bash

  1. Jak ve skriptu Python nastavím PYTHONPATH?

  2. Jak zahrnout soubor do skriptu bash shell

  3. Jak spustit bash skript?

  1. Jak ladit Bash skript?

  2. Bash Script - Jak číst uživatelský vstup

  3. Jak spustit bash skript přes absolutní cestu?