Saya memiliki file skrip bash, yang diletakkan di bawah beberapa direktori yang ditambahkan ke $PATH sehingga saya dapat memanggil skrip dari direktori mana pun.
Ada file teks lain di bawah direktori yang sama dengan skrip. Saya ingin tahu bagaimana cara merujuk ke file teks dalam skrip?
Misalnya, jika skrip hanya untuk menampilkan konten file teks, cat textfile
tidak akan berfungsi, karena saat memanggil skrip dari direktori lain, file teks tidak ditemukan.
Jawaban yang Diterima:
Ini harus bekerja sama, selama tidak ada symlink (dalam perluasan jalur atau skrip itu sendiri):
-
MYDIR="$(dirname "$(realpath "$0")")"
-
MYDIR="$(dirname "$(which "$0")")"
-
Versi dua langkah dari salah satu di atas:
MYSELF="$(realpath "$0")"
MYDIR="${MYSELF%/*}"
Jika ada symlink dalam perjalanan ke skrip Anda, maka which
akan memberikan jawaban tidak termasuk resolusi tautan itu. Jika realpath
tidak diinstal secara default di sistem Anda, Anda dapat menemukannya di sini.
[EDIT]: Sepertinya realpath
tidak memiliki keunggulan dibandingkan readlink -f
disarankan oleh Caleb, mungkin lebih baik menggunakan yang terakhir. Tes waktu saya menunjukkan itu sebenarnya lebih cepat.