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