Misalkan saya memiliki file bash yang disebut myBash.bash
. Itu berada di:
/myDirect/myFolder/myBash.bash
Sekarang saya ingin menggunakan string /myDirect/myFolder
(lokasi myBash.bash
) di dalam skrip. Apakah ada perintah yang bisa saya gunakan untuk menemukan lokasi ini?
Sunting: Idenya adalah saya ingin mengatur folder zip dengan kode yang dapat dimulai dengan skrip bash di dalam file zip itu. Saya tahu path file relatif dari kode di dalam file zip itu, tetapi bukan path absolut, dan saya membutuhkannya. Salah satu caranya adalah dengan hard-code di path, atau membutuhkan path file yang akan diberikan sebagai variabel. Namun saya akan merasa lebih mudah jika mungkin untuk file-bash untuk mencari tahu di mana itu sendiri dan kemudian membuat jalur yang relevan ke file lain dari pengetahuan tentang struktur file zip.
sumber
Jawaban:
Anda bisa mendapatkan path lengkap seperti:
Dan seperti yang ditunjukkan oleh Serg Anda dapat menggunakan
dirname
untuk menghapus nama file seperti iniatau bahkan lebih baik untuk mencegah kutipan canggung dan pemisahan kata dengan nama file yang sulit:
Jauh lebih baik daripada ide saya sebelumnya yang menguraikannya (saya tahu akan ada cara yang lebih baik!)
Catatan
realpath
mengembalikan jalur sebenarnya dari suatu file$0
apakah file ini (skrip)s|old|new|
gantiold
dengannew
\(.*\)/
simpan semua karakter sebelum/
untuk nanti\1
bagian yang disimpansumber
$0
dansed
sihir. Tapised
sihir itu benar-benar tidak perlu ketika alat sepertidirname
adarealpath
:realpath "$( dirname $0 )"
Saya pribadi akan menggunakanreadlink
tetapi itu saya:readlink -e $(dirname $0)
dirname "$(realpath "$0")"
akan lebih baik? Biasanya orang ingin mengetahui direktori induk dari file yang direferensikan alih-alih direktori induk dari tautan simbolik yang merujuk ke file tersebut."$(dirname "$(realpath "$0")")"
adalah cara yang paling mudah. Kutipan di dalam$()
pekerjaan seperti biasa.$()
menjadi subkulit akan memungkinkan memiliki kutipan di luar. Saya tidak akan mengatakan itu sesederhana itu, kecuali orang menyadari$()
semuanya subkulitjika skrip berada di jalur Anda, Anda dapat menggunakan sesuatu seperti
EDIT: setelah membaca komentar dari Serg, ini mungkin solusi umum yang berfungsi baik skrip ada di jalur Anda atau tidak.
sumber
which
lebih cocok ketika skrip berada di salah satu direktori yang merupakan bagian dariPATH
variabel. Gunakan$0
dari dalam skrip, seperti yang ditampilkan Zanna. Tetapi jawaban Anda tepat karena Anda menggunakandirname
alih-alih mengacaukansed
, maka +1 untuk ituJawaban yang diterima tampaknya sempurna. Berikut cara lain untuk melakukannya:
/bin/pwd
mencetak path sebenarnya dari direktori, sebagai lawan daripwd
perintah builtin.sumber
Ini diambil sebagai referensi dari kenorb dan andro
Tanpa dirname, readlink, realpath, BASH_SOURCE
Semua adalah builtin
sumber