Щоб отримати повний шлях, використовуйте:
readlink -f relative/path/to/file
Щоб отримати каталог файлу:
dirname relative/path/to/file
Ви також можете поєднати два:
dirname $(readlink -f relative/path/to/file)
Якщо readlink -fце недоступно у вашій системі, ви можете використовувати це * :
function myreadlink() {
(
cd "$(dirname $1)"
echo "$PWD/$(basename $1)"
)
}
Зверніть увагу, що якщо вам потрібно лише перейти до каталогу файлу, вказаного як відносний шлях, вам не потрібно знати абсолютний шлях, відносний шлях цілком законний, тому просто використовуйте:
cd $(dirname relative/path/to/file)
якщо ви хочете повернутися (поки сценарій запущений) до початкового шляху, використовуйте pushdзамість cdі, popdколи закінчите.
* Хоча myreadlinkвище досить добре в контексті цього питання, воно має певні обмеження щодо readlinkзапропонованого вище інструменту. Наприклад, він неправильно переходить за посиланням на файл із іншим basename.