'Dışa aktar' komutu ne işe yarar?


86

Linux'ta biraz yeniyim ve bazı komutları işlerin yapılması için körü körüne çalıştırıyorum. Daha fazla yeni insanın bunlar hakkında düzenli bir bilgisi olacağı için bu tür soruları sormanın bir israf olmayacağını düşündüm.

Geçenlerde Jenkins ile çalışmaya başladım ve sonra bu exportkomutu Jenkins savaş arşivini çalıştırmak için kullanmak zorunda kaldım . Bu yüzden exportgenel olarak hangi komutun işe yaradığını ve Jenkins'i çalıştırırken neden bu komutu çalıştırmamız gerektiğini bilmem gerekiyordu (Jenkins home ayarlandıktan sonra).

Teşekkürler!


1
Kullandığınız dışa aktarma komutu hakkında daha fazla şey söylerseniz yardımcı olur. Daha fazla bağlam olmadan, bir ortam değişkeni ayarladığınızı tahmin ediyorum. Bkz. En.wikipedia.org/wiki/Environment_variable#Unix
Joshua D. Boyd


Yanıtlar:


99

exportin shve ilgili kabuklar (gibi bash), alt süreçlere aktarılacak bir ortam değişkenini işaretler , böylece alt süreç onları miras alır.

exportPOSIX'te tanımlanmıştır :

Kabuk, daha sonra yürütülen komutların ortamında olmalarına neden olacak şekilde, belirtilen adlara karşılık gelen değişkenlere ihraç niteliği verecektir. Bir değişkenin adının ardından = word ise, o değişkenin değeri word olarak ayarlanmalıdır.


Çok teşekkürler! Tüm cevaplarınız gerçekten yardımcı oldu ve birkaç şey daha öğrenmek için rehberlik ediyorlar! :-)
Chathura Kulasinghe

1
Bu anlamda çocuk süreci nedir?
AsyncMoksha

@MartinHansen ne anlamıyorsun? ayrıca cevabıma bakın.
barlop

Bağlantının sonunda fazladan bir köşeli parantez var, onu düzenleyemiyorum, çünkü bu tek sembollü düzenleme :)
Radoslav Stoyanov

28

Sanırım bir Windows arka planından geliyorsun. Bu yüzden onları karşılaştıracağım (ben de Linux'ta yeniyim). Bir şeyleri anlamaya yardımcı olmak için kullanıcının yorumuma verdiği yanıtı buldum.

Windows'ta bir değişken kalıcı olabilir veya olmayabilir. Ortam değişkeni terimi, cmd kabuğunda SET komutu ile ve ayrıca değişken Windows GUI içinde ayarlandığında, böylece kayıt defterinde ayarlandığında ve yeni cmd pencerelerinde görüntülenebilir hale geldiğinde bir değişken kümesi içerir. ör. windows https://technet.microsoft.com/en-us/library/bb490998.aspx'deki set komutu için belgeler "Ortam değişkenlerini görüntüler, ayarlar veya kaldırır. Set parametresiz kullanıldığında, mevcut ortam ayarlarını görüntüler." Linux'ta set ortam değişkenlerini göstermez, ortam değişkenleri olarak çağırmadığı / ifade etmediği kabuk değişkenlerini görüntüler. Ayrıca Linux, değişkenleri ayarlamak için set kullanmaz (sonunda bir not olarak açıkladığım konumsal parametreler ve kabuk seçeneklerinden ayrı olarak), yalnızca onları görüntülemek için ve hatta sadece kabuk değişkenlerini görüntülemek için. Windows ayarlamak ve görüntülemek için set kullanır, örneğin set a = 5, linux kullanmaz.

Linux'ta, önyüklemede değişkenleri ayarlayan bir betik hazırlayabilirsiniz, örneğin /etc/profileveya/etc/.bashrc başka türlü, kalıcı değiller. RAM'de saklanırlar.

Linux'ta kabuk değişkenleri ve ortam değişkenleri arasında bir ayrım vardır. Linux'ta, kabuk değişkenleri yalnızca mevcut kabukta ve Ortam değişkenleri o kabukta ve tüm alt kabuklarda bulunur.

Kabuk değişkenlerini şu şekilde görüntüleyebilirsiniz: set komutla görüntüleyebilirsiniz (bununla pencerelerin aksine, değişkenlerin linux'ta set komutu ile ayarlanmadığını unutmayın).

set -o posix; set (bu set -o posix'i bir kez yapmak, çok fazla gereksiz şeyi göstermemeye yardımcı olur). Yaniset kabuk değişkenlerini gösterir.

Ortam değişkenlerini şu şekilde görüntüleyebilirsiniz: env komutla görüntüleyebilirsiniz:

kabuk değişkenleri, örneğin sadece a = 5

ortam değişkenleri dışa aktarımla ayarlanır, dışa aktarma da kabuk değişkenini ayarlar

Burada zzz kabuk değişkeninin zzz = 5 ile ayarlandığını görüyorsunuz ve çalışırken gösterildiğini görüyorsunuz set ancak ortam değişkeni olarak .

Burada yyy'nin dışa aktarımla ayarlandığını görüyoruz, bu nedenle bu bir ortam değişkeni. Ve hem kabuk değişkenleri hem de ortam değişkenleri altında gösterildiğini görün

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

diğer kullanışlı konular

/unix/176001/how-can-i-list-all-shell-variables

/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference

Not - biraz detaylandıran ve yazdıklarımı biraz düzelten bir nokta, linux bash'da "set" in "konumsal parametreleri" ve "kabuk seçeneklerini / niteliklerini" ve teknik olarak her ikisini ayarlamak için kullanılabileceğidir. bunlar değişkenlerdir, ancak man sayfaları onları bu şekilde tanımlamayabilir. Ancak yine de belirtildiği gibi set, kabuk değişkenlerini veya ortam değişkenlerini ayarlamaz). Bunu yaparsanız, set asdfo zaman $ 1'i asdf olarak ayarlar ve eğer yaparsanız echo $1asdf görürsünüz. Yaparsanset a=5 , a değişkenini 5'e eşit ayarlamaz. Konumsal parametre $ 1, "a = 5" dizesine eşit olacak şekilde ayarlanır. Dolayısıyla, eğer linux'ta a = 5 setini gördüyseniz, biri $ 1'de a = 5 dizesini istemediği sürece muhtemelen bir hatadır. Linux setinin ayarlayabileceği diğer şey, kabuk seçenekleri / nitelikleridir. -O ayarlarsanız bunların bir listesini görürsünüz. Ve örneğin yapabilirsinset -o verbose, off, ayrıntılandırmayı açmak için (btw varsayılan kapalıdır, ancak bu bunda bir fark yaratmaz). Veya set +o verboseayrıntıyı kapatmak için yapabilirsiniz. Windows'un set komutu için böyle bir kullanımı yoktur.


Görünüşe göre set kabuğu ve ortamı gösteriyor ve 'env' yalnızca ortamı gösteriyor
barlop

1
İlk başta kafa karıştırıcı olabilecek nix vs win durumlarını kapsadığı için bu yanıtı çok beğendim.
N0thing

6

Basit bir ifadeyle, yeni bir kabuk oturumu açtığınızda ortam değişkenleri ayarlanır. Değişken değerlerden herhangi birini değiştirirseniz, kabuğun bu değişikliği seçme yolu yoktur. bu, yaptığınız değişikliklerin yeni mermi oturumlarında etkili olacağı anlamına gelir. exportKomut, diğer taraftan, dışa aktarılan değişkene yapılan değişiklikle ilgili güncel kabuk oturumu güncelleme olanağı sağlar. Değiştirdiğiniz değişkenin değerini kullanmak için yeni kabuk oturumuna kadar beklemeniz gerekmez.


1
Ama dersem a=5o echo $azaman 5 diyor. Yine de "herhangi bir değişken değeri değiştirirseniz, kabuğun bu değişikliği seçmesinin bir yolu yoktur. Bu, yaptığınız değişikliklerin yeni kabuk oturumlarında etkili olacağı anlamına gelir." . <- Peki, kabuk oturumunu dışa aktarmadan nasıl güncelledi. İhracatın gerekli olduğu bir örnek verebilir misiniz?
barlop

Bir kabuk oturumu sırasında belirlediğiniz değişken bir kabuk değişkenidir. yereldir ve mevcut kabuk oturumu için erişilebilir. bunu istediğiniz zaman değiştirebilirsiniz ve mevcut değeri, değişiklikleri dışa aktarmanıza gerek kalmadan mevcut kabuk işlemi için kullanılabilir olacaktır. diğer yandan çevresel değişkenler oturum açma sırasında belirlenir. Değerlerinden herhangi birini değiştirdiğinizde, yeni değeri hem mevcut kabuk süreci hem de herhangi bir yeni alt süreç için kullanılabilir kılan basit bir terimle yenileme olacak olan şeyi gerçekleştirmeniz gerekir. ihracatın yaptığı tam olarak bu.
katwekibs
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.