Saya ingin tahu di mana jalur baru harus ditambahkan ke PATH
variabel lingkungan. Saya tahu ini dapat dicapai dengan mengedit .bashrc
(misalnya), tetapi tidak jelas bagaimana melakukannya.
Dengan cara ini:
export PATH=~/opt/bin:$PATH
atau ini?
export PATH=$PATH:~/opt/bin
Jawaban yang Diterima:
Hal-hal sederhana
PATH=$PATH:~/opt/bin
atau
PATH=~/opt/bin:$PATH
tergantung pada apakah Anda ingin menambahkan ~/opt/bin
di akhir (untuk dicari setelah semua direktori lain, jika ada program dengan nama yang sama di beberapa direktori) atau di awal (untuk dicari sebelum semua direktori lain).
Anda dapat menambahkan beberapa entri secara bersamaan. PATH=$PATH:~/opt/bin:~/opt/node/bin
atau variasi pada pemesanan berfungsi dengan baik. Jangan masukkan export
di awal baris karena memiliki komplikasi tambahan (lihat di bawah di bawah “Catatan tentang shell selain bash”).
Jika PATH
. Anda dibangun oleh banyak komponen berbeda, Anda mungkin berakhir dengan entri duplikat. Lihat Bagaimana cara menambahkan jalur direktori home untuk ditemukan oleh Unix perintah mana? dan Hapus duplikat entri $PATH dengan perintah awk untuk menghindari penambahan atau penghapusan duplikat.
Beberapa distribusi secara otomatis menempatkan ~/bin
di PATH Anda jika ada.
Di mana harus meletakkannya
Letakkan baris untuk mengubah PATH
di ~/.profile
, atau di ~/.bash_profile
jika itu yang Anda miliki.
Perhatikan bahwa ~/.bash_rc
tidak dibaca oleh program apapun, dan ~/.bashrc
adalah file konfigurasi instance interaktif bash. Anda tidak boleh mendefinisikan variabel lingkungan di ~/.bashrc
. Tempat yang tepat untuk mendefinisikan variabel lingkungan seperti PATH
adalah ~/.profile
(atau ~/.bash_profile
jika Anda tidak peduli dengan shell selain bash). Lihat Apa perbedaan antara keduanya dan mana yang harus saya gunakan?
Jangan taruh di /etc/environment
atau ~/.pam_environment
:ini bukan file shell, Anda tidak dapat menggunakan substitusi seperti $PATH
di sana. Dalam file ini, Anda hanya dapat mengganti variabel, tidak menambahkannya.
Potensi komplikasi di beberapa skrip sistem
Anda tidak perlu export
jika variabel sudah ada di lingkungan:setiap perubahan nilai variabel tercermin di lingkungan.¹ PATH
cukup banyak selalu di lingkungan; semua sistem unix mengaturnya sangat awal (biasanya dalam proses pertama, sebenarnya).
Saat login, Anda dapat mengandalkan PATH
sudah ada di lingkungan, dan sudah berisi beberapa direktori sistem. Jika Anda menulis skrip yang mungkin dieksekusi lebih awal saat menyiapkan semacam lingkungan virtual, Anda mungkin perlu memastikan bahwa PATH
tidak kosong dan diekspor:jika PATH
masih belum disetel, maka sesuatu seperti PATH=$PATH:/some/directory
akan menyetel PATH
ke :/some/directory
, dan komponen kosong di awal berarti direktori saat ini (seperti .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Catatan tentang shell selain bash
Di bash, ksh dan zsh, export
adalah sintaks khusus, dan keduanya PATH=~/opt/bin:$PATH
dan export PATH=~/opt/bin:$PATH
melakukan hal yang benar bahkan. Di shell gaya Bourne/POSIX lainnya seperti tanda hubung (yaitu /bin/sh
pada banyak sistem), export
diuraikan sebagai perintah biasa, yang menyiratkan dua perbedaan:
~
hanya diurai di awal kata, kecuali dalam tugas (lihat Bagaimana cara menambahkan jalur direktori home agar ditemukan oleh Unix perintah mana? untuk detailnya);$PATH
di luar tanda kutip ganda putus jikaPATH
berisi spasi atau[*?
.
Jadi di shell seperti dash, set export PATH=~/opt/bin:$PATH
PATH
ke string literal ~/opt/bin/:
diikuti dengan nilai PATH
hingga ruang pertama. PATH=~/opt/bin:$PATH
(tugas kosong) tidak memerlukan tanda kutip dan melakukan hal yang benar. Jika Anda ingin menggunakan export
dalam skrip portabel, Anda perlu menulis export PATH="$HOME/opt/bin:$PATH"
, atau PATH=~/opt/bin:$PATH; export PATH
(atau PATH=$HOME/opt/bin:$PATH; export PATH
untuk portabilitas bahkan ke shell Bourne yang tidak menerima export var=value
dan tidak melakukan ekspansi tilde).
¹ Ini tidak benar dalam cangkang Bourne (seperti pada cangkang Bourne yang sebenarnya, bukan cangkang bergaya POSIX modern), tetapi Anda sangat tidak mungkin menemukan cangkang tua seperti itu akhir-akhir ini.