Mám soubor se skriptem bash, který je umístěn pod nějakým adresářem přidaným do $PATH, takže mohu volat skript z libovolného adresáře.
Ve stejném adresáři jako skript je další textový soubor. Zajímalo by mě, jak odkazovat na textový soubor ve skriptu?
Pokud je například skript pouze pro výstup obsahu textového souboru, cat textfile
nebude fungovat, protože při volání skriptu z jiného adresáře není textový soubor nalezen.
Přijatá odpověď:
Ty by měly fungovat stejně, pokud nejsou žádné symbolické odkazy (v rozšíření cesty nebo ve skriptu samotném):
-
MYDIR="$(dirname "$(realpath "$0")")"
-
MYDIR="$(dirname "$(which "$0")")"
-
Dvoufázová verze kteréhokoli z výše uvedených:
MYSELF="$(realpath "$0")"
MYDIR="${MYSELF%/*}"
Pokud je na cestě k vašemu skriptu symbolický odkaz, pak which
poskytne odpověď bez rozlišení tohoto odkazu. Pokud je realpath
není ve výchozím nastavení na vašem systému nainstalován, najdete jej zde.
[UPRAVIT]: Jak se zdá, realpath
nemá žádnou výhodu oproti readlink -f
navrhl Caleb, je pravděpodobně lepší použít to druhé. Moje testy načasování ukazují, že je to ve skutečnosti rychlejší.