Bir Linux bash terminalinde, çoğu zaman ayarlanmış olan birçok ortam değişkeni vardır; $PATH ve $HOME.
Ayarlanan tüm ortam değişkenlerini görmek mümkün mü? Nasıl?
Bir Linux bash terminalinde, çoğu zaman ayarlanmış olan birçok ortam değişkeni vardır; $PATH ve $HOME.
Ayarlanan tüm ortam değişkenlerini görmek mümkün mü? Nasıl?
Yanıtlar:
TL; DR: kullanım (set -o posix ; set)
Bash kılavuzuna göre yapabilirsiniz kullan set Tüm ortam değişkenlerini göstermek için yerleşik komut ayarlandı. set komutu ayrıca herhangi bir fonksiyonun tanımını da gösterecektir. Eğer sadece değişkenleri görmek, fonksiyonları görmek istemiyorsanız set komutunu çalıştırmadan önce POSIX modunu açabilirsiniz. Bunu yapmanın en kolay yolu set -o posix, ancak siz kapatıncaya kadar POSIX modunu açık bırakır set +o posix.
Bu nedenle, aşağıdaki komut mevcut kabuğunuzdaki POSIX uyumluluğunu etkilemeden bir alt kabuk kullanarak tüm tanımlanmış ortam değişkenlerini gösterecektir.
(set -o posix ; set)
@RedGrittyBrick ve @iglvzx kullanılması önerilir env ancak, bu komut ortam değişkenlerinin tam bir listesini vermeyecektir. env yalnızca dışa aktarma için işaretlenmiş değişkenleri gösterecektir. Çıktısını karşılaştırın env | sort ve export -p ve ne demek istediğimi anlayacaksın. Koşabilirsin comm -23 <(set -o posix; set) <(env|sort) Hangi ortam değişkenlerinin dışa aktarılmadığını görmek istiyorsanız.
Tutarsızlık nedeni env aksine ayrı bir çalıştırılabilir set Bu bir kabuk yerleşik komutudur. Bash kılavuzuna göre, Bir kabuk yerleşik komutu veya işlevi olmayan bir komut çalıştırıldığında, yalnızca Bash'de dışa aktarma için işaretlenmiş olan ortam değişkenlerini alır. . Dışa aktarılmayan birçok değişken var. Bu nedenle, kabuğunuzun tanımladığı tüm değişkenleri görmek istiyorsanız, set kılavuzda belirtildiği gibi komut.
Aşağıdaki komutları kullanarak bu davranışı kendiniz için kolayca test edebilirsiniz.
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
Bunu göreceksin set iken çıktı sağlar env değil.
env argüman içermeyen komut, "dışa aktarılan" ortam değişkenlerinin ve değerlerinin bir listesini yazdıracaktır. Bu değişkenler alt işlemlere görünür hale getirilir - diğer pek çok çevre değişkeni bununla gösterilmez ve sadece çalışan kabuğun içinde, örneğin yapılandırma için kullanılır.
printenv, ikisinden beri env ve set sadece çevreye vermekten başka fonksiyonlara
env yalnızca dışa aktarma için işaretlenmiş olan çevre değişkenlerinin bir listesini yazdıracaktır. Tüm değişkenleri yazdırmaz.
compgen -v
kabuk değişkenlerini yazdırır (ancak değerleri değil).
compgen -e
Dışa aktarılan değişkenleri, yani, bu kabuğun başladığı süreçlerle miras kalanları (ancak değerleri değil) yazdırır.
Kabuk ve dışa aktarılan değişkenler arasındaki fark: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1