Saya ingin cara untuk menambahkan sesuatu ke $PATH, di seluruh sistem atau untuk pengguna individu, tanpa berpotensi menambahkan jalur yang sama beberapa kali.
Salah satu alasan ingin melakukan ini adalah agar penambahan dapat dilakukan di .bashrc
, yang tidak memerlukan login, dan juga lebih berguna pada sistem yang menggunakan (mis.) lightdm
, yang tidak pernah memanggil .profile
.
Saya mengetahui pertanyaan yang berhubungan dengan cara membersihkan duplikat dari $PATH, tetapi Saya tidak ingin menghapus duplikat . Saya ingin cara menambahkan jalur hanya jika belum ada.
Jawaban yang Diterima:
Misalkan path baru yang ingin kita tambahkan adalah:
new=/opt/bin
Kemudian, dengan menggunakan shell POSIX apa pun, kita dapat menguji untuk melihat apakah new
sudah ada di jalur dan tambahkan jika belum:
case ":${PATH:=$new}:" in
*:"$new":*) ;;
*) PATH="$new:$PATH" ;;
esac
Perhatikan penggunaan titik dua. Tanpa titik dua, kita mungkin berpikir bahwa, katakanlah, new=/bin
sudah ada di jalur karena polanya cocok dengan /usr/bin
. Sementara PATH biasanya memiliki banyak elemen, kasus khusus nol dan satu elemen di PATH juga ditangani. Kasus PATH yang awalnya tidak memiliki elemen (kosong) ditangani dengan menggunakan ${PATH:=$new}
yang menetapkan PATH
ke $new
jika kosong. Menyetel nilai default untuk parameter dengan cara ini adalah fitur dari semua shell POSIX:lihat bagian 2.6.2 dari dokumen POSIX.)
Fungsi yang dapat dipanggil
Untuk kenyamanan, kode di atas dapat dimasukkan ke dalam suatu fungsi. Fungsi ini dapat didefinisikan pada baris perintah atau, agar tersedia secara permanen, dimasukkan ke dalam skrip inisialisasi shell Anda (Untuk pengguna bash, itu adalah ~/.bashrc
):
pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
Untuk menggunakan fungsi pembaruan jalur ini untuk menambahkan direktori ke PATH saat ini:
pupdate /new/path