Setelah memulai terminal bash, saya perhatikan bahwa variabel PATH berisi entri duplikat. Terminal saya memulai shell login , jadi ~/.bash_profile
bersumber, diikuti oleh ~/.profile
dan ~/.bashrc
. Hanya di ~/.profile
saya membuat entri jalur yang digandakan.
Untuk menjadi bertele-tele, ini adalah urutan di mana file-file yang HARUS dipasok bersumber:
Sourced /etc/profile
Sourced /etc/bash.bashrc
Sourced .bash_profile
Sourced .profile
Sourced .bashrc
Sebelum ada yang menandai ini sebagai duplikat dari "variabel PATH berisi duplikat", terus membaca.
Pada awalnya saya pikir ini ada hubungannya dengan ~/.profile
bersumber dua kali, jadi saya meminta file untuk menulis ke file log setiap kali itu bersumber, dan anehnya itu hanya masuk satu entri, yang memberitahu saya bahwa itu hanya bersumber satu kali. Yang lebih mengejutkan adalah fakta bahwa ketika saya mengomentari entri yang ada ~/.profile
, entri tersebut masih muncul dalam PATH
variabel. Ini membawa saya ke tiga kesimpulan, salah satunya dengan cepat dikesampingkan:
- Bash mengabaikan komentar bash yang valid dan masih mengeksekusi kode yang berkomentar
- Ada skrip yang membaca
~/.profile
dan mengabaikan kode apa pun yang mencetak output (file log misalnya) - Ada salinan saya
~/.profile
yang bersumber di tempat lain
Yang pertama, saya dengan cepat menyimpulkan tidak menjadi masalah karena beberapa pengujian cepat. Opsi kedua dan ketiga adalah tempat saya membutuhkan bantuan.
Bagaimana cara mengumpulkan log skrip yang dijalankan ketika terminal saya mulai? Saya menggunakan echo
dalam file yang saya periksa untuk mengetahui apakah mereka bersumber oleh bash, tapi saya perlu menemukan metode konklusif yang melacak pelaksanaan sampai pada titik ketika terminal siap bagi saya untuk mulai mengetik ke dalamnya.
Jika hal di atas tidak memungkinkan, maka dapatkah ada yang menyarankan di mana lagi saya dapat melihat untuk melihat skrip yang sedang dijalankan .
Referensi masa depan
Ini skrip yang sekarang saya gunakan untuk menambahkan ke jalur saya:
function add_to_path() {
for path in ${2//:/ }; do
if ! [[ "${!1}" =~ "${path%/}" ]]; then # ignore last /
new_path="$path:${!1#:}"
export "$1"="${new_path%:}" # remove trailing :
fi
done
}
Saya menggunakannya seperti ini:
add_to_path 'PATH' "/some/path/bin"
Script memeriksa apakah path sudah ada dalam variabel sebelum memprioritaskannya.
Untuk pengguna zsh, Anda dapat menggunakan yang setara ini:
function add_to_path() {
for p in ${(s.:.)2}; do
if [[ ! "${(P)1}" =~ "${p%/}" ]]; then
new_path="$p:${(P)1#:}"
export "$1"="${new_path%:}"
fi
done
}
Edit 28/8/2018
Satu hal lagi yang saya temukan bisa saya lakukan dengan skrip ini adalah juga memperbaiki jalurnya. Jadi pada awal .bashrc
file saya , saya melakukan sesuatu seperti ini:
_temp_path="$PATH"
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
add_to_path 'PATH' "$_temp_path"
unset _temp_path
Terserah Anda apa yang PATH
harus dimulai. Periksa PATH
dulu untuk memutuskan.
~/.profile
dan ~/.bashrc
dari~/.bash_profile
~/.profile
jika~/.bash_profile
tidak ada ...