Maaf jika ini pertanyaan bodoh, tapi saya mencarinya tanpa hasil.
Apa sebenarnya yang dilakukan baris kedua?:
#!/bin/sh
cd ${0%/*} || exit 1
Saya tahu yang pertama adalah shebang, yang kedua mencoba untuk mengubah direktori tetapi bagian yang membingungkan adalah ${0%/*}
.
Bisakah Anda jelaskan kepada saya bahwa baris kedua?
command-line
sh
Navaro
sumber
sumber
dirname
perintah$(dirname $0)
dirname
ada di dalamnya ? Jelas bukan di Bash v4.3.11 yang merupakan shell default di Ubuntu Trusty.dirname
itu bukan shell built-in.Jawaban:
${0}
adalah argumen pertama dari skrip, yaitu nama skrip atau path. Jika Anda memulai script sepertipath/to/script.sh
, maka${0}
akan persis string yang:path/to/script.sh
.Bagian
%/*
memodifikasi nilai${0}
. Artinya: ambil semua karakter hingga/
diikuti dengan nama file. Pada contoh di atas,${0%/*}
akanpath/to
.Anda dapat melihatnya beraksi di shell Anda:
Sh mendukung banyak jenis "substitusi parameter" lainnya. Inilah, misalnya, cara mengambil nama file alih-alih path:
Secara umum,
%
dan%%
strip sufiks, sementara#
dan##
strip awalan. Anda dapat membaca lebih lanjut tentang substitusi parameter .sumber
|| exit 1
mungkin diperlukan karenacd
mungkin keluar dengan status 2, bukan 1, karena kesalahan. Namun saya setuju bahwa itu tidak terlalu berguna (biasanya program tidak peduli dengan status keluar tertentu). Mungkin ini bagian dari skrip yang lebih besar?