Учитывая два файла:
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 ) )
Не знаю, идеально ли он, но, кажется, ведет себя так, как ожидалось.