Để sử dụng đường dẫn đầy đủ:
readlink -f relative/path/to/file
Để lấy thư mục của tệp:
dirname relative/path/to/file
Bạn cũng có thể kết hợp cả hai:
dirname $(readlink -f relative/path/to/file)
Nếu readlink -fkhông có sẵn trên hệ thống của bạn, bạn có thể sử dụng cái này * :
function myreadlink() {
(
cd "$(dirname $1)"
echo "$PWD/$(basename $1)"
)
}
Lưu ý rằng nếu bạn chỉ cần di chuyển đến thư mục của tệp được chỉ định là đường dẫn tương đối, bạn không cần biết đường dẫn tuyệt đối, đường dẫn tương đối là hoàn toàn hợp pháp, vì vậy chỉ cần sử dụng:
cd $(dirname relative/path/to/file)
nếu bạn muốn quay lại (trong khi tập lệnh đang chạy) về đường dẫn ban đầu, hãy sử dụng pushdthay vì cdvà popdkhi bạn hoàn tất.
* Mặc dù myreadlinkở trên là đủ tốt trong bối cảnh của câu hỏi này, nhưng nó có một số hạn chế so với readlinkcông cụ được đề xuất ở trên. Ví dụ: nó không theo đúng một liên kết đến một tệp khác basename.