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" )