Saya sumber bashrc dari beberapa teman saya. Jadi saya akhirnya memiliki entri duplikat dalam variabel $ PATH saya. Saya tidak yakin apakah itu masalah untuk perintah yang butuh waktu lama untuk memulai. Bagaimana cara kerja $ PATH di bash secara internal? Apakah memiliki lebih banyak PATHS memperlambat waktu mulai saya?
45
zsh
, sesederhanatypeset -aU path
, FWIW .Jawaban:
Memiliki lebih banyak entri
$PATH
tidak secara langsung memperlambat startup Anda, tetapi itu memperlambat setiap kali Anda pertama kali menjalankan perintah tertentu dalam sesi shell (tidak setiap kali Anda menjalankan perintah, karena bash menyimpan cache). Perlambatan jarang terlihat kecuali Anda memiliki sistem file yang sangat lambat (misalnya NFS, Samba atau sistem file jaringan lainnya, atau di Cygwin).Entri duplikat juga sedikit mengganggu ketika Anda meninjau
$PATH
visual Anda, Anda harus mengarungi lebih banyak cruft.Cukup mudah untuk menghindari menambahkan entri rangkap.
Catatan: sumber skrip shell orang lain berarti mengeksekusi kode yang dia tulis. Dengan kata lain, Anda memberi teman Anda akses ke akun Anda kapan pun mereka mau.
Catatan:
.bashrc
bukan tempat yang tepat untuk mengatur$PATH
atau variabel lingkungan lainnya. Variabel lingkungan harus ditetapkan~/.profile
. Lihat File pengaturan mana yang harus digunakan untuk mengatur variabel lingkungan dengan bash? , Perbedaan antara .bashrc dan .bash_profile .sumber
case :$PATH:
dan tidakcase $PATH
sehingga cocok meskipun entri pertama atau terakhir.Saya telah melihat orang-orang membersihkan duplikat dari variabel PATH mereka menggunakan
awk
dan sesuatu seperti ini:Anda bisa mencoba menambahkannya ke bashrc Anda sendiri dan pastikan Anda sumber file lain di suatu tempat sebelum menjalankannya.
Sebuah alternatif akan menggunakan yang
pathmerge
utilitas.Adapun masalah kecepatan Anda, ini tidak akan mempengaruhi waktu startup shell dengan cara yang signifikan tetapi mungkin menghemat waktu melakukan penyelesaian tab untuk perintah, terutama ketika perintah tidak ditemukan di jalan dan itu pencarian berulang melalui yang sama folder mencarinya.
Catatan tentang keamanan: Anda harus benar - benar memperhatikan peringatan Gilles tentang keamanan di sini. Dengan sumber file yang dimiliki oleh pengguna lain Anda memberikan izin gratis kepada para pengguna untuk mengeksekusi kode mereka sendiri sebagai pengguna Anda setiap kali Anda memulai sebuah shell. Jika Anda tidak mempercayai pengguna tersebut dengan kata sandi Anda, Anda seharusnya tidak mencari file shell mereka.
sumber
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
:
tidak hanya masalah kosmetik. Ini sama dengan menambahkan.
ke jalur Anda, yang berpotensi berbahaya.Berdasarkan jawaban @Gilles Anda dapat membungkusnya dalam fungsi untuk meminimalkan mengetik:
sumber
Hanya pertandingan pertama
$PATH
yang dijalankan, sehingga setiap entri berikutnya tidak diproses setelah itu. Itu sebabnya Anda terkadang harus merevisi urutan entri di Anda$PATH
untuk membuat lingkungan Anda berperilaku seperti yang diharapkan.Untuk menjawab pertanyaan Anda: ini seharusnya tidak menjadi penyebab startup lambat.
sumber
TAB
? Dalam hal ini Anda harus memeriksa apakah Anda melengkapi definisi yang tidak terlihatcomplete -c which -a
. Anda harus menghapus-a
parameter. Anda dapat memeriksa bahwa dengan mengeluarkan perintah:complete | grep which
.Untuk mencegah entri duplikat di PATH saya, saya harus meletakkan yang berikut di KEDUA ~ / .bash_profile dan ~ / .bashrc:
Kelemahan utama adalah bahwa entri entri PATH, tapi saya pikir saya bisa hidup dengan itu.
sumber