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ší.