Để 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 -f
khô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 pushd
thay vì cd
và popd
khi 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 readlink
cô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
.