GNU/Linux >> Znalost Linux >  >> Linux

Odkazovat na soubor ve stejném adresáři skriptu nalezeného v $path?

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


Linux
  1. Proč skript Bash nerozpozná aliasy?

  2. Bash skript k odstranění nejstaršího souboru ze složky?

  3. Má být výstup uložen do souboru se stejným názvem jako vstupní soubor?

  1. Vysvětlení adresáře /etc/sysconfig

  2. Vypsáno jádro, ale soubor jádra není v aktuálním adresáři?

  3. Jak přesměrovat stderr a stdout na různé soubory ve stejném řádku ve skriptu?

  1. Jak získám absolutní adresář souboru v bash?

  2. Jak mohu najít nejstarší soubor ve stromu adresářů

  3. Proč je kořenový adresář označen znakem /?