Saya ingin menambahkan, di ~ / .bashrc, beberapa direktori ke $ PATH saya.
$ PATH saya cukup panjang sehingga agak sulit untuk melihat direktori apa yang dikandungnya dan dalam urutan apa.
Saya tahu saya bisa memodifikasi ~ / .bashrc saya menjadi:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
itu akan membuatnya lebih mudah untuk dibaca. Tapi saya bertanya-tanya apakah selama tahun-tahun terakhir Bash telah memperoleh beberapa sintaks yang membuat menentukan PATH panjang lebih mudah. Misalnya, saya berfantasi tentang sintaksis yang mirip dengan:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Saya tahu sintaks seperti itu tidak valid. Saya bertanya-tanya apakah ada sesuatu yang mudah. Disana?
PATH=foo:$PATH
tampaknya salah karena terus tumbuh setiap saatsource ~/.bashrc
dan bahkanexec bash
tidak dapat membantu sejak$PATH
ituexport
.Jawaban:
Saya menggunakan satu set fungsi kenyamanan untuk menambahkan atau menambahkan path ke variabel. Fungsi datang dalam tarball distribusi untuk Bash dalam file contrib yang disebut "pathfuncs".
Jika Anda menentukan variabel sebagai argumen kedua, ia akan menggunakannya sebagai ganti PATH.
Untuk kenyamanan, inilah mereka:
Jika Anda menambahkannya ke file startup bash Anda, Anda dapat menambahkan ke PATH Anda seperti ini:
Atau tentukan variabel yang berbeda:
Saya menggunakan metode ini dalam file rc saya dengan menempatkan pre_paths pertama dan add_paths kedua. Itu membuat semua perubahan jalur saya mudah dimengerti sekilas. Manfaat lain adalah bahwa garis-garisnya cukup pendek sehingga saya dapat menambahkan komentar tambahan pada sebuah baris jika perlu.
Dan karena ini adalah fungsi, Anda dapat menggunakannya secara interaktif dari baris perintah, seperti dengan mengatakan
add_path $(pwd)
untuk menambahkan direktori saat ini ke path.sumber
del_path .
).OK, saya menemukan solusi berikut, yang menurut saya elegan (sejauh sintaksis shell pergi). Ini menggunakan sintaks array Bash dan juga cara yang rapi untuk bergabung dengan elemen:
WASPADA!
Ternyata solusi ini memiliki masalah : Berbeda dengan solusi @terdon dan @Starfish, itu tidak memeriksa terlebih dahulu apakah jalur sudah di PATH. Jadi, karena saya ingin meletakkan kode ini di ~ / .bashrc (dan bukan di ~ / .profile), jalur duplikat akan menyusup ke PATH. Jadi jangan gunakan solusi ini (kecuali Anda memasukkannya di ~ / .profile (atau, lebih baik, ~ / .bash_profile karena memiliki sintaks spesifik Bash)).
sumber
PATH
untuk benar-benar menyebabkan masalah kinerja (terutama karena shell berhasil mencari cache).Saya menggunakan fungsi di bawah ini di
~/.bashrc
. Itu adalah sesuatu yang saya dapatkan dari sysadmin di lab lama saya, tetapi saya rasa dia tidak menulisnya. Cukup tambahkan baris ini ke Anda~/.profile
atau~/.bashrc
:Ini memiliki berbagai keunggulan:
$PATH
sepele:pathmunge /foo/bar
;pathmunge /foo/bar
atau akhir (pathmunge /foo/bar
setelah) dari$PATH
.File inisialisasi shell Anda kemudian akan berisi sesuatu seperti:
sumber
grep
.eval
sehingga Anda dapat menyebabkan beberapa kerusakan serius jika Anda menjalankannya dengan argumen yang salah.grep
, lihat bugzilla.redhat.com/show_bug.cgi?id=544652#c7Saya ingin menambahkan, di ~ / .bashrc, beberapa direktori ke $ PATH saya.
Saya menggunakan yang berikut ini di Cygwin. Ini harus bekerja di versi lain dari bash. Anda dapat menghapus
unset PATH
untuk membangun berdasarkan arus AndaPATH
(jika Anda melakukan ini, Anda mungkin harus mencari cara menambahkan:
pemisah dengan benar).catatan:
bash
fungsi tetapi hilang setelah crash disk.Di saya
.bash_profile
:...
Di
~/.path_elements
:sumber
Saya menggunakan ini di .bashrc saya (dan juga .zshrc saya, karena saya biasanya menggunakan zsh di mana tersedia, bukan bash). Memang, ini mengharuskan saya untuk menambahkan direktori secara manual, tetapi keuntungannya adalah ketika saya memperbaruinya, saya dapat terus menyalinnya ke server baru dan tidak khawatir tentang PATH pada server baru yang dibuat dengan direktori yang tidak ada di sana.
Saya melakukan hal yang sama untuk MANPATH saya:
Selain memiliki satu file yang dapat saya salin ke sistem di lingkungan yang berbeda tanpa takut menambahkan direktori yang tidak ada ke PATH, pendekatan ini juga memiliki keuntungan memungkinkan saya untuk menentukan urutan saya ingin direktori muncul di PATH. Karena baris pertama dari setiap definisi sepenuhnya mendefinisikan ulang variabel PATH, saya dapat memperbarui. $ PATH = $ PATH: / new / dir ". Ini memastikan saya mendapatkan salinan bersih sesuai urutan yang saya inginkan.
sumber
d="/usr/share/man" ; [ -d "$d" ] && MANPATH="$MANPATH:${d}"
Ini akan lebih pendek, dan lebih mudah untuk menambahkan dir baru (cukup salin satu baris dan edit bagian "d = ...." pertama). Namun, untuk PATH satu, saya pikir Anda akan berakhir dengan terlalu banyak dir di PATH Anda, yang tidak selalu baik (bagaimana jika beberapa "foo" perintah ada di salah satu jalur yang kurang dikenal, dan melakukan sesuatu yang sama sekali berbeda bahwa apa yang diharapkan pengguna biasa?)Ada cara mudah! Baca Fungsi Shell dan Variabel Path di Linux Journal , 01 Mar 2000 Oleh Stephen Collyer
Fungsi ini memungkinkan saya menggunakan tipe data baru di lingkungan bash saya - daftar yang dipisahkan oleh titik dua. Selain PATH, saya menggunakannya untuk menyesuaikan LOCATE_PATH, MANPATH, dan lainnya, dan sebagai tipe data umum dalam pemrograman bash. Inilah cara saya mengatur PATH saya (menggunakan fungsi):
Karena tautan Linux Journal disebut sebagai "broken", saya telah meletakkan Fungsi Bash Path dalam file .shar di http://pastebin.ubuntu.com/13299528/
sumber