Bir bash terminalini başlattıktan sonra, PATH değişkeninin yinelenen girişler içerdiğini fark ettim. Terminalim bir giriş kabuğu başlatır , bu ~/.bash_profile
nedenle kaynaklanır ve ardından ~/.profile
ve gelir ~/.bashrc
. Yalnızca ~/.profile
çoğaltılan yol girişlerini oluşturuyorum.
Bilgiçlikçi olmak için, kaynak olması gereken dosyaların kaynağı şu şekildedir:
Sourced /etc/profile
Sourced /etc/bash.bashrc
Sourced .bash_profile
Sourced .profile
Sourced .bashrc
Herhangi biri bunu "PATH değişkeni yinelenen içeriyor" ifadesi olarak işaretlemeden önce okumaya devam edin.
İlk başta bu ~/.profile
iki kez kaynak ile ilgili olduğunu düşündüm , bu yüzden her zaman bir günlük dosyasına dosya yazmak vardı ve şaşırtıcı bir şekilde, sadece bir kez kaynak olduğunu söyleyen sadece bir giriş günlüğe vardı. Daha da şaşırtıcı olan şey, içerideki ~/.profile
girişleri yorumladığımda, girişlerin hala PATH
değişkente görünmesidir . Bu beni üç sonuca götürdü, bunlardan biri hızla reddedildi:
- Bash geçerli bash yorumlarını yok sayar ve hala yorumlanan kodu yürütür
~/.profile
Bir çıktıyı (örneğin günlük dosyası) yazdıran kodu okuyan ve yok sayan bir komut dosyası vardır.- Başka bir
~/.profile
yerden temin edeceğim başka bir kopyası var
Birincisi, bazı hızlı testler nedeniyle hızlı bir şekilde durumun olmadığı sonucuna vardım. İkinci ve üçüncü seçenekler yardıma ihtiyacım olan yerler.
Terminalim başladığında yürütülen komut dosyalarının kaydını nasıl toplayabilirim? echo
Bash tarafından kaynaklanıp kaynaklanmadığını öğrenmek için kontrol ettiğim dosyalarda kullandım , ancak terminal yazmaya başlamam için hazır olduğunda uygulamayı yürüten kesin bir yöntem bulmam gerekiyor.
Yukarıdakiler mümkün değilse, başka hangi komut dosyalarının çalıştırıldığını görmek için başka nereye bakabileceğimi önerebilir .
Gelecek referans
Bu, şimdi yoluma eklemek için kullandığım komut dosyası:
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
}
Ben böyle kullanın:
add_to_path 'PATH' "/some/path/bin"
Komut dosyası, yolu eklemeden önce değişkente zaten var olup olmadığını kontrol eder.
Zsh kullanıcıları için bu eşdeğerini kullanabilirsiniz:
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
}
Düzenle 28/8/2018
Bu komut dosyasıyla yapabileceğimi bulduğum bir şey daha yolu düzeltmektir. Yani dosyamın başında, .bashrc
böyle bir şey yapıyorum:
_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
Ne ile PATH
başlamalı size kalmış . Karar PATH
vermek için önce inceleyin .
~/.profile
ve ~/.bashrc
gelen~/.bash_profile
~/.profile
eğer~/.bash_profile
yoksa ...