Linux bash terminalinde tanımlanmış tüm ortam değişkenlerinin listesini nasıl görebilirim?


Yanıtlar:


29

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.


23

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.


10
tercih ederim printenv, ikisinden beri env ve set sadece çevreye vermekten başka fonksiyonlara
iglvzx

3
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.
Starfish

4
@Starfish haklı - bu kabul edilen cevabın çok yanlış olduğu anlamına gelir. Yalnızca dışa aktarılan değişkenleri listelediğini söylemek için düzenlendi.
Volker Siegel

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.