[linux] узнать абсолютный путь

a10063

имеется строка с относитльным путем
скажем,


rp=./../../dir1/./dir2/file1


задача: определить абсолютный путь - ap
инструмент: наиболее стандартные утилиты Linux, bash shell
придумал вариант:


ap=`cd "$rp" 2>/dev/null; echo "$PWD"`


но он не работает на несуществующих rp
как быть? может, есть какая-нибудь утилита, которая выполняет это

gsharov

Посмотри stderr после cd - и если там error то тогда и ap присвой err...

a10063

ты не понял
мне нужно, чтобы образовывался ap, пусть даже несуществующий
ведь . и .. определены
я, конечно, могу узнать, чему они равны, попытаться сформировать абс. путь, написав довольно сложную bash-функцию, но я думаю, что есть вариант проще
очень уж частая задача!

ppplva

Чисто формально:
ap=`pwd`/$rp

a10063

наверное, не совсем корректно поставил задачу...
мне хотелось, чтобы ap представлялся в виде без относительных ссылок
типа: /usr/share/mc/mc.ext
да, и еще: rp может быть уже абсолютным
поэтому мне твой вариант не подошел

a10063

у всех прошу прощения за допущенные ошибки

TYU_2008

man realpath, если я правильно тебя понял

a10063

да, это то, что нужно
походу без компилирования C кода не обойтись
а так хотелось...

sergey_m

В FreeBSD есть уже готовая команда realpath(3 просто вызывающая realpath(2). Мб под каким нибудь дистрибутивом линукса тоже есть.

ppplva

В debian есть пакет realpath

a10063

под Линухом, так понимаю, наоборот realpath(2) вызывает realpath(3).
2 - системные вызовы
3 - процедуры
но у меня, например, realpath(2) нет, а хотелось бы что-то универсальное иметь
вообще, я, м.б., посмотрю исходные тексты realpath(3) и перепишу ее в баш-функцию... она ж, наверное, не сложная
как только узнать, в каком она пакете (ман не дает такой инфы)?

sergey_m

Сорри. Имел в виду realpath(1) использует realpath(3).
Оставить комментарий
Имя или ник:
Комментарий: