У мене є утиліта, що складається з декількох каталогів з деякими скриптами bash та допоміжними файлами, які будуть розгорнуті на декількох машинах, можливо, в іншому каталозі на кожній машині. Сценарії повинні мати можливість посилатися на шляхи відносно себе, тому мені потрібно мати можливість отримати шлях до файлу, який зараз виконується.
Мені відомо про dirname $0
ідіому, яка прекрасно спрацьовує при прямому виклику мого сценарію. На жаль, є бажання мати можливість створювати посилання на ці сценарії з абсолютно іншого каталогу і все ще мати відносну логічну роботу.
Приклад загальної сухої структури такий:
/
|-usr/local/lib
| |-foo
| | |-bin
| | | |-script.sh
| | |-res
| | | |-resource_file.txt
|-home/mike/bin
| |-link_to_script (symlink to /usr/local/lib/foo/bin/script.sh)
Як я можу надійно посилатися /usr/local/lib/foo/res/resource_file.txt
з script.sh
того , що викликається /usr/local/lib/foo/bin/script.sh
або ~mike/bin/link_to_script
?