Ortam değişkenlerine bash komut dosyasında erişilemez


22

Garip bir sorunla karşılaştım. Bazı env değişkenleri içine koymak .bashrcve olması gerektiği gibi çalışır:

echo $HADOOP_HOME
/home/me/dist/hadoop

Ancak env değişkenine bash komut dosyaları yürütülürken erişilemez. /tmp/sample.shAşağıdaki içerikle oluşturduğumu varsayalım :

#! /bin/bash
echo $HADOOP_HOME

Komut dosyasının üzerinde çalıştığımda, boş bir satır yankılanıyor:

/tmp/sample.sh
   

1
İlgili bölümünüzü gösterebilir misiniz .bashrc? Benim tahminim değiliz edilir exporting: export HADOOP_HOME=/home/me/dist/hadoop, çalıştırdığınızda /tmp(ki yumurtlar yeni sample.sh` bashHADOOP_HOME yeni ortamda değil, yeni bir çevre ile).
John N

Yanıtlar:


29

Çünkü HADOOP_HOMEdeğişken dışa aktarılmaz:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

Bir kabuk komut dosyası çalıştırdığınızda, bu komut dosyası, #!/bin/bashgeçerli olanın alt kabuğu olan kendi bash örneğinde (işte budur ) çalışır. Değişkenler, yalnızca dışa aktarıldıklarında varsayılan olarak alt kabuklara geçirilmez. Her bash oturumunu bağımsız olarak düşünün (büyük ölçüde). Genellikle birinde tanımlanan değişkenlerin bir başkasının ortamını kirletmesini istemezsiniz. Bunun gerekli olduğu durumlarda kullanın export.

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.