realpath
, вероятно, лучше
Но ...
Первоначальный вопрос был очень запутанным, с примером плохо
связанные с вопросом, как указано.
Выбранный ответ фактически отвечает приведенному примеру, а не совсем
вопрос в названии. Первая команда - это ответ (это
действительно ? Я сомневаюсь), и мог бы обойтись без '/'. И я не вижу
что делает вторая команда.
Смешано несколько вопросов:
изменение относительного пути к абсолютному
обозначает, возможно, ничего.
( Как правило, если вы выполните команду, такую как touch foo/bar
,
путь foo/bar
должен существовать для вас и, возможно, использоваться в
вычисление до того, как файл будет фактически создан. )
может быть несколько абсолютных путей, обозначающих один и тот же файл
(или потенциальный файл), особенно из-за символических ссылок (символических ссылок)
на пути, но, возможно, по другим причинам (устройство может
смонтирован дважды только для чтения). Один может или не может хотеть решить
простота таких символических ссылок.
получение до конца цепочки символических ссылок на несимвольную ссылку
файл или имя. Это может или не может привести к абсолютному пути,
в зависимости от того, как это сделано. И можно, а может и не хотеть
разрешите его в абсолютный путь.
Команда readlink foo
без опции дает ответ, только если ее
аргумент foo
является символической ссылкой, и этот ответ является значением этого
символическая. Никакой другой ссылки не последовало. Ответ может быть относительным путем:
каким бы ни было значение аргумента символической ссылки.
Однако у readlink
есть опции (-f -e или -m), которые будут работать для всех
файлы, и дать один абсолютный путь (тот, без символических ссылок) для
файл фактически обозначается аргументом.
Это прекрасно работает для всего, что не является символической ссылкой, хотя можно
желание использовать абсолютный путь без разрешения промежуточного
символические ссылки на пути. Это делается командой realpath -s foo
В случае аргумента символической ссылки, readlink
с его параметрами
снова разрешите все символические ссылки на абсолютном пути к аргументу, но
это также будет включать в себя все символические ссылки, которые могут встретиться
после значения аргумента. Вы можете не хотеть этого, если хотите
абсолютный путь к самой символической ссылке аргумента, а не к чему-либо
это может ссылаться на. Опять же, если foo
является символической ссылкой, realpath -s foo
будет
получить абсолютный путь без разрешения символических ссылок, включая
в качестве аргумента.
Без опции -s
, realpath
почти так же, как
readlink
, за исключением простого чтения значения ссылки, а также нескольких
другие вещи. Мне просто не понятно, почему у readlink
есть
варианты, создавая, по-видимому, нежелательную избыточность с
realpath
.
Изучение Интернета не говорит о многом, кроме того, что может быть
некоторые различия в системах.
Вывод: realpath
- лучшая команда для использования, с наибольшим
гибкость, по крайней мере, для использования, запрашиваемого здесь.