Linux ortam değişkenlerini ayarlama


9

Red Hat Linux Enterprise 5 kullanıyorum; Ortam değişkenlerini ayarlamak için her zaman export komutunu kullanıyorum.

Ortam değişkenlerini ayarlamanın başka yolları var mı ve bunların avantajları / dezavantajları nelerdir?

Yanıtlar:


16

Bu Bash man sayfasından bir alıntıdır:

export [-fn] [name [= word]] ...
export -p
Verilen adlar, daha sonra yürütülen komutların ortamına otomatik olarak dışa aktarılmak üzere işaretlenir. -F seçeneği belirtilirse, adlar işlevlere başvurur ...

Değişkene yalnızca mevcut ortamda ihtiyacınız varsa, dışa aktarmayı kullanmak gerekmez.

var=value

Düzenle:

Dışa aktarma olmadan: sadece mevcut ortam. İhracatla: mevcut ortam ve çocuk ortamları.

Aşağıda, alt ortamdaki bir değişkenin kullanılabilirliği üzerindeki dışa aktarmanın etkisinin ve alt ortamdaki değişikliklerin üst öğeyi etkilemediğinin bir gösterimi verilmiştir:

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []

İlk eko sonra ( echo "parent...") Her iki nedeni "123" ve "456" bakın var1ve var2mevcut ortamda faaliyet göstermektedir. var3Henüz ayarlanmadığı için için bir değer görmüyorsunuz .

" var3=..." İle başlayan satırdan sonra var1dışa aktarılmadığı için bir değer görmüyorsunuz . Sen yapmak için bir değer gördüğünüz var2çünkü edildi ihraç etti. İçin bir değer görüyorsunuz var3çünkü yalnızca alt ortam için ayarlanmış .

( isteğe bağlı bash -cargümanın içeriğiyle bir komut dosyası çalıştırmaya eşdeğerdir -c. Bir komut dosyası veya başka bir yürütülebilir dosya veya bu durumda, bash -cgeçerli ortamın alt öğesi olma argümanı , sonuçta elbette çocuğun üst.)

"Komut dosyasında" değişkenin değerleri değiştirilir. Şimdi bu yeni değerleri çıkarıyor.

"Komut dosyası" tamamlandığında, yürütme üst ortama geri döner (bu durumda komut satırı). Son ekodan sonra, alt ortamda yapılan değişiklikler üst öğeyi etkilemediğinden orijinal değerleri görürsünüz.


"Mevcut ortamda" ne demek? Geçerli bash betiği veya?
George2

1
Evet, "geçerli komut dosyasında" veya "geçerli etkileşimli oturumda" anlamına gelir. Böylece, geçerli komut dosyası veya etkileşimli oturumdan çalıştırılan yürütülebilir dosyalar veya komut dosyaları hariç tutulur. Amaç export- değişkenleri bu alt ortamlar için kullanılabilir kılmak.
sonraki duyuruya kadar duraklatıldı.

Söylediklerinden bir miktar çatışma buluyorum. :-) "Bu nedenle çalıştırılabilir dosyaları veya komut dosyalarını hariç tutar", "hariç tut" öğesine dikkat edin, ancak alıntıladığınız şekilde "Verilen adlar, daha sonra yürütülen komutların ortamına otomatik olarak dışa aktarılmak üzere işaretlenmiştir." - "dahil et" (otomatik olarak dışa aktarılacak veya etkilenecek) ve "hariç tut" olmamalıdır. Kafam karıştı, lütfen açıklar mısınız?
George2

1
@ George2: Daha fazla bilgi için düzenlenen cevabıma bakın.
sonraki duyuruya kadar duraklatıldı.

3

Bunu sen söyledin

Ortam değişkenini ayarlamak için her zaman export komutunu kullanıyorum

Bu şekilde ifade ettiğiniz gibi, bir çevresel değişkeni nasıl devam ettirdiğinizi gerçekten sormaya çalıştığınız anlaşılıyor. Bunu yapmak export VAR="foo"için ifadenizi $ HOME / .bash_profile dosyanıza (bash kullanıyorsanız) yerleştirmeniz gerekir. Bu çevresel değişkenin kök dışındaki tüm kullanıcılar için kalmasını istiyorsanız, / etc / profile dizinine ekleyin. Kök kullanıcı için de eklenmesini istiyorsanız, /root/.bash_profile olarak ayarlayın.

Bu, bash'ın tercih edilen kabuk olduğu tüm giriş kabukları için çalışacaktır. Giriş yapmayan kabuklar için .bashrc kullanmanız gerekir. Diğer mermiler için hiçbir fikrim yok: D


2
Bash man sayfasının bu dosyaların ne zaman kaynaklandığı ile ilgili bölümünü yeniden okumak isteyebilirsiniz.
sonraki duyuruya kadar duraklatıldı.

1
Evet ... Giriş yaptım ve interaktif kafam karıştı. Cevabımı yansıtacak şekilde düzenleme. Düzeltme için teşekkürler!
whaley

"çevresel bir değişkeni kalıcı kılmak" - bunun anlamı nedir?
George2

1
"Persist", bir kabuk her başlatıldığında bu değişkenin bu değere sahip olmasını istediğiniz anlamına gelir. Amacına bağlı olarak değişkeni dışa aktarmak gerekebilir veya olmayabilir.
sonraki duyuruya kadar duraklatıldı.

1
Bu, onu kalıcı hale getirmediğiniz anlamına gelir. Whaley'in tarif ettiği şeyi yapmayı deneyin .
sonraki duyuruya kadar duraklatıldı.

1

ihracat bunu yapmanın en basit yoludur, neden onu bırakmıyorsunuz?

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells

2
Bourne kabuğu VARIABLE = değer gerektirir; VARIABLE ihracat
mpez0

1
Bu da işe yaramalı ...
Stack Overflow öldü

@BloodPhilia, bash için ortam değişkenini ayarlamanın tek bir yolu var mı?
George2

1
@ George2 - VARIABLE = değerini kullanırken, geçerli komut dosyası yürütüldükten sonra giden yerel bir değişken oluşturuyorsunuz. Dışa aktarmayı kullanırken, alt süreçler değişken değerleri üst süreçlerinden devralır. Örneğin: FOO=BAR; executethisprogram Program executethisprogramdeğişkenin değerini bilmeyecektir FOO. Öte yandan, kullanırken: FOO=BAR; export FOO; executethisprogram Program executethisprogramdeğişkenin değerini bilecektir FOO.
Stack Overflow

1
executethisprogram bir "ihracat FOO" alt işlemi değildir . Komut dosyasının adını veya etkileşimli (komut satırı) kabuğunu çağıran alt işlemdir (alt). export FOOdeğişkeni FOO, komutun verildiği ortamın alt süreçlerinden erişilebilmesi için işaretleyen bir komuttur . Bu ebeveyn bir komut dosyası veya etkileşimli bir kabuk olabilir.
sonraki duyuruya kadar duraklatıldı.

1

Bunun gibi bir şey de yapabilirsiniz:

VAR=val application

Örneğin:

LANG=C ls --help

İngilizce çıktı.

LANG=pl_PL ls --help

Lehçe çıktı (varsa).

Geçmişte sh olarak VAL = val veremezdiniz. Zorundaydın

VAL=val; export VAL

"VAR = val application" hakkında kafam karıştı, val ne demek ve uygulama demek
George2

2
Bu örnekler ls, geçerli (üst) ortamdaki değişkenin değerini etkilemeden alt ortam için değişkenin değerini ( örneğin) ayarlar .
sonraki duyuruya kadar duraklatıldı.

Çocuk çevresi nedir? Kafam karıştı.
George2

1
lsyürütüldüğü sürecin bir çocuğudur. Ben yazarsanız lskomut istemine, interaktif kabuk üstüdür ve lsçocuktur. Kullanan bir komut dosyası lsvarsa, komut dosyası üst ve lsalt.
sonraki duyuruya kadar duraklatıldı.
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.