сценарии bash: как найти абсолютный путь к «символической ссылке / ..»?

Учитывая два файла:

generic/scripts/hello.sh
parent/scripts -> generic/scripts

После вызывая parent / scripts / hello.sh из любого места, я хотел бы (в скрипте) найти полный путь к родительскому каталогу. В данном случае родитель .

Основная проблема заключается в том, что parent / scripts / .. относится к generic в unix. С другой стороны, все, что связано с регулярными выражениями, не является универсальным и может быть подвержено ошибкам.

Решения, которые не работают:

`dirname $0`/..
realpath  `dirname $0`/..
readlink -f `dirname $0`/..
`cd *something*/..; pwd`
`perl ... abs_path(...)`

Все они будут указывать на общий , а не на родительский ] из-за символьной ссылки.

Все, что связано с регулярными выражениями, не может быть адаптировано / универсально, может не работать для более сложных путей. Могут быть и другие .. и символические ссылки в пути, вам нужен прародитель, это имя каталога, включающее .. , вы вызываете его через $ PATH ...

Более того, я бы хотел, чтобы он работал в любом случае , даже когда он вызывается через $ PATH .

Есть какое-нибудь простое безопасное решение этой простой проблемы? Я имею в виду, что в конце концов он просто получает родительский каталог!

Что я использовал:

dir=$( dirname $( cd `dirname $0` >/dev/null; pwd ) )

Не знаю, идеально ли он, но, кажется, ведет себя так, как ожидалось.

8
задан Noel Yap 18 July 2012 в 17:28
поделиться