BASH’da ihracat ne yapıyor? [çift]


73

Olası Çoğalt:
bash'ta “a = b” ve “export a = b” arasındaki fark

Kabul etmek zor, ama exportbir ortam değişkenine tam olarak ne yaptığını gerçekten anlamadım . Bir değişkeni dışa aktarmazsam, bazen alt işlemlerde göremeyeceğimi biliyorum, ancak bazen görebildiğim gibi görünüyor. Söylediğimde gerçekten neler oluyor

export foo=5

ve ne zaman bir değişkeni dışa aktarmamalıyım?


İşte bu konuda en az bir başka yararlı soruya bir link: superuser.com/questions/143413/linux-environment-variables ... ironik bir şekilde bu soru Google’da bash cinsinden ihracatla ilgili sorgum için ilk açılan soru oldu. .
Ogre Psalm33


Yaygın olarak kullanılan bir kullanım, exportbenzer genel değişkenler oluşturmak için .bashrc / .bash_profile ifadelerine eklemektir $HOME.
Evan Plaice

Dikkat et, başlangıçta göründüğünden daha fazla hikaye var. Sizi cevabımı kontrol etmeye davet ediyorum.
jasonleonhard

Yanıtlar:


15

Kimden man bash:

ÇEVRE

Bir program çağrıldığında, ortam adı verilen bir dizi dizge verilir. Bu, name = value formunun bir ad-değer çiftlerinin listesidir.

Kabuk, çevreyi değiştirmek için çeşitli yollar sunar. Çalıştırmada, kabuk kendi ortamını tarar ve bulunan her ad için bir parametre oluşturur ve otomatik olarak alt işlemlere dışa aktarma için işaretler. Yürütülen komutlar ortamı devralır. export Ve declare -x komutlar parametreleri ve fonksiyonları eklendi ve çevreden silinecek izin verir. Ortamdaki bir parametrenin değeri değiştirilirse, yeni değer eskinin yerine ortamın bir parçası haline gelir. Yürütülen herhangi bir komutun miras aldığı ortam, kabuğun değerleri kabuğunda değiştirilebilen, unset komut tarafından kaldırılan herhangi bir çiftin yanı sıra dışa aktarma ve declare -xkomutlar yoluyla yapılan tüm eklemelerden oluşur .


66
IMHO, herhangi bir ek açıklama çabası olmadan dokümantasyondan alıntı yapıştırarak kopyalanmamalıdır.
Artur

27
Bu alıntı çok net değil ve açıkçası ne olduğunu anlamadım.
Trismegistos

4
@Artur: Aksine: Eğer () belgesinden alıntı) bir soruyu yanıtlarsa, ek açıklamalar yapmamayı tercih ederim.
René Nyffenegger

1
@ RenéNyffenegger ama öyle görünüyor, öyle değil. En azından BloodPhilia tarafından kabul edilen olarak işaretlenmesi gereken bir cevabı okuyana kadar anlamadım.
Vladislav Rastrusny

1
Artur ve Trismegistos’un yaptığı puanların herkesin kopyalayıp kopyalayabildiğine inanıyorum, her zaman yeterli değil, açıklığa kavuşturmak ve iyi bir cevap vermek. Bazı dokümanları kopyalayıp yapıştırmak ya da bir link vermek iyi, aslında teşvik edilir, ancak bazı ek kalite açıklamaları yapılmalıdır. Ayrıca, bu açıklama RenéNyffenegger gibi insanlar tarafından ihtiyaç duymazlarsa kolayca göz ardı edilebilir, ancak bundan faydalanacak olanlar için orada olacak. Hepimiz öğrenmeye çalışıyoruz ve anlayış kazanmamızın farklı yollarını kullanıyoruz, bu çeşitli öğrenme stillerini kapsamaya yardımcı olur ve puanınızı iyileştirir.
jasonleonhard

97

Dışa aktarılan değişkenler alt işlemlere aktarılır, dışa aktarılmayan değişkenler aktarılmaz.


Bu etki için herhangi bir belgeye işaret edebilir misiniz? Bundan daha fazla bilgi arıyorum. Örneğin, bir değişkenin yalnızca bir kez dışa aktarılması mı gerekiyor, yoksa her değişiklikten sonra onu dışa aktarmanız mı gerekiyor, vb.
Chas. Owens


3
Bir yola şey ekleyerek doğrulayabilirsiniz (söylemek PYTHONPATH) ve daha sonra çağırarak, bu sen gerçi echo $PYTHONPATHsizin kadar piton veya bash komut dosyaları tarafından tanınan almaz exporto
Kaushik Ghose

Bu cevap da tamamen doğru görünmüyor. Örneğin Bash alt kabukları alt işlemlere $BASHPIDgöredir (göre ) ve henüz desteklenmeyen değişkenleri ana kabuktan okuyabilirsiniz. Basit kanıt: x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x") Benim tahminim, bunun çocuk süreci bir alt kabuk olduğunda meydana gelen özel bir durum olduğudur.
JepZ

20

Kullandığınızda export, değişkeni export komutunun çağrıldığı kabuğun ortam değişkenleri listesine ekliyorsunuz ve bir kabuğun tüm ortam değişkenleri alt işlemlere geçirilir, bu nedenle onu kullanabilirsiniz.

Kabuğu bitirdiğinizde çevresi tahrip olur, bu yüzden ortam değişkenleri giriş sırasında, örneğin .bashrc dosyasında bildirilir ve verilir.

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.