Adakah yang bisa menjelaskan apa arti perintah ini?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
${GZIP_BINDIR-'/bin'}
adalah bash
pola ekspansi parameter. Dari man bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
Segera sebelum halaman manual bagian ini telah (terima kasih kepada @jwodder untuk memberi tahu):
Omitting the colon results in a test only for a parameter that is unset.
Seperti yang dikatakan halaman manual, ini akan menetapkan nilai default variabel GZIP_BINDIR
. Jika GZIP_BINDIR
memiliki nilai yang sebelumnya ditetapkan (selain nol karena Anda tidak menggunakan :
) maka nilai itu akan digunakan, jika tidak /bin
akan digunakan sebagai nilai variabel GZIP_BINDIR
.
Di sisi lain, jika Anda juga ingin menguji nilai-nilai nol, gunakan pola ini (termasuk :
):
${GZIP_BINDIR:-'/bin'}
Setelah itu $PATH
akan diperluas ke nilai-nilai yang dipegangnya sebelumnya. Jadi, jika PATH
sebelumnya sudah:
/usr/sbin:/usr/bin
Sekarang Anda PATH
akan (mengingat GZIP_BINDIR
tidak diatur):
/bin:/usr/sbin:/usr/bin
export PATH
akan membuat ini PATH
tersedia untuk semua proses anak.
:
di${GZIP_BINDIR-'/bin'}
" Belum tentu.${parameter-word}
juga valid, meskipun sepertinya tidak ada di halaman manual.:-
mengatakan: "Ketika tidak melakukan ekspansi substring, menggunakan formulir yang didokumentasikan di bawah ini (misalnya :-), tes bash untuk parameter yang tidak disetel atau nol. Menghilangkan titik dua menghasilkan pengujian hanya untuk parameter yang tidak disetel. "PATH
danexport
ke dalam satu perintah sebagai berikut:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Apakah benar-benar tidak ada titik dua sebelum tanda hubung di dalam ekspansi parameter
${GZIP_BINDIR-'/bin'}
?Konstruk semacam ini hampir selalu ditulis dengan titik dua, seperti
${GZIP_BINDIR:-'/bin'}
artinya, "jika $ GZIP_BINDIR NULL atau tidak disetel, tetapkan ke '/ bin'"Namun, sintaks yang Anda berikan adalah valid, tapi jarang.
${GZIP_BINDIR-'/bin'}
(tanpa titik dua) berarti, "jika $ GZIP_BINDIR tidak disetel, setel ke '/ bin'". Jika diset (telah dideklarasikan) tetapi tidak ada yang ditugaskan padanya (mis. NULL) tidak ada yang akan dimasukkan.Mungkin ada bug di sini sebagai titik dua yang mengikuti konstruk variabel (...}
:
$ PATH ...) akan tetap dimasukkan jika $ GZIP_BINDIR adalah set tapi NULL. Karena ini akan menambah titik dua di awal $ PATH, itu akan menyebabkan direktori saat ini dicari terlebih dahulu.Itu dianggap oleh sebagian besar sebagai masalah keamanan karena membuatnya lebih mudah untuk menyebabkan program jahat dengan nama yang sama dengan perintah standar untuk dijalankan hanya dengan meletakkannya di direktori saat ini.
Agar $ PATH tidak berubah jika $ GZIP_BINDIR disetel tetapi NULL (kosong), sintaks yang benar adalah
${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Agar $ PATH tidak berubah jika $ GZIP_BINDIR tidak disetel atau disetel tetapi NULL, sintaks yang benar adalah
${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
sumber
Perintah ini memperbarui variabel PATH.
Ini
PATH
adalah variabel lingkungan yang menetapkan sekumpulan direktori tempat program yang dapat dieksekusi berada.Ini menambah nilai variabel lain
GZIP_BINDIR
jika keluar ke PATH lain gunakan / bin sebaliknya dan tambahkan ke PATHekspor digunakan untuk mengatur PATH tersedia untuk semua proses anak dan subkulit Baca ini untuk informasi lebih lanjut tentang
Anda harus mencatat bahwa ini bukan statis dan Anda akan kehilangan itu setelah Anda keluar dari shell Anda.
Untuk menjadikan edit PATH ini permanen, Anda harus menambahkan baris ini ke
.bashrc
dan tambahkan baris
kemudian jalankan perintah
sumber