Как получить каталог каталога скрипта, когда задействованы символические ссылки? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть файл ~ / .bash_aliases, который я символически связал с файлом в репозитории git в ~ / dev / bash_scripts / bash_aliases. sh

Когда запускается .bash_aliases, я хочу чтобы запустить ~ / dev / bash_scripts / bash_functions. sh но я не хочу жестко задавать этот путь. Я хотел бы избежать установки символической ссылки на bash_functions. sh, если это возможно. Как мне выполнить sh это?

Цель: даже если мой репозиторий ~ / dev / blah / bash_scripts, пока я установил символическую ссылку на bash_aliases. sh, тогда он сможет для запуска bash_functions. sh, который всегда находится в том же каталоге, что и bash_aliases. sh

РЕДАКТИРОВАТЬ: добавить больше деталей для уточнения

Я хочу, чтобы bash_aliases. sh найдите путь bash_functions. sh и выполните его независимо от того, откуда он выполняется.

Hiro@penguin:~/dev/bash_scripts$ tree
.
├── bash_aliases.sh
└── bash_functions.sh
Hiro@penguin:~$ ls -la|grep .bash
lrwxrwxrwx   1 Hiro Hiro     49 Dec 16 11:49 .bash_aliases -> /home/Hiro/dev/bash_scripts/bash_aliases.sh

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Попробуйте что-то вроде этого, чтобы учесть различные особые случаи:

# directory original file is in
dir0="$( cd "$(dirname "$( readlink "$0" || ls -1 "$0" )")" && pwd -P )"

Здесь читается любая символическая ссылка, в которой еще используется настоящее имя. Затем он cd переходит в этот каталог, чтобы получить его физический путь, пропуская любые другие странности ссылки c.

0 голосов
/ 07 февраля 2020

Чтобы получить реальный путь без символической ссылки bash_aliases. sh, вы можете сделать:

dirname "$(readlink -f "${BASH_SOURCE[0]}")"

Итак, чтобы вызвать скрипт bash_functions. sh, который находится на том же пути, вы можно написать:

"$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/bash_functions.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...