Yanıtlar:
$BASH
Bir olan yerel değişken akım (bash) geçerlidir sadece kabuk.
Gibi ortam değişkenleri$SHELL
sistem genelinde geçerlidir. Bir Bash kabuğunda, $BASH
yürütme yolu işaret Bash ise, $SHELL
kabuk noktaları (aynı değere sahip olabilir), varsayılan olarak tanımlanır.
Çevre değişkenlerinin açıklaması için Ubuntu Yardımında Çevre Değişkenleri bölümüne bakınız .
Bir ortam değişkeni, bir programda ve alt programlarda küresel olarak bulunur. Bir kabuk değişkeni yalnızca geçerli kabukta kullanılabilir. Bir kabuk değişkenini bir ortam değişkeni olarak kullanılabilir yapmak için, export VARNAME
(doları olmadan $
) kullanın .
Açıklama için örnekler:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
Bir ortam değişkenini tanımlamanın başka bir yolu:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
mutlaka bir ortam değişkeni ayarlamaz. stackoverflow.com/questions/7411455/…
export
, alt işlemler için bir ortam değişkeni belirler. Bağladığınız gönderi bu cevaba aykırı değil, neden yanlış olduğunu düşündüğünüzü açıklayabilir misiniz?
export
kesinlikle bir ortam değişkeni ayarlayın
Bir fark var. Shell Değişkenleri ve Çevre Değişkenleri bunu yapabileceğimi daha iyi açıklayacaktır, ancak işte ondan bir alıntı:
Bir kabuk değişkeninde bir değişiklik yapılırsa, herhangi bir çatallı alt işlemin değişikliği görmesi için açıkça ilgili ortam değişkenine "dışa aktarılması" gerekir. Shell değişkenlerinin tanımlandıkları shell'de yerel olduklarını hatırlayın.
Bu soruyu cevaplamak için önce değişkenin kapsamını anlamaya çalışın.
SOME_ENV_VARIABLE="testing.txt"
İçinde olduğu gibi yeni bir değişken oluşturduğunuzda SHELL scope
, bu , kullanıcının oturum açtığı kabuk örneğiyle erişilebileceği anlamına gelir . Örnek değiştiğinde, örneğin yeni bir terminal açarsınız veya kabuğu değiştirirsiniz (örneğin, geçmek için csh
) bu değişkene erişemezsiniz.
Bu değişkene benzer bir değişkeni dışa aktardığınızda export SOME_ENV_VARIABLE
, şimdi kapsamda kullanılabilir, bu durumda , kabuğu değiştirirseniz, yine de bu değişkene erişebilirsiniz. Aşağıdaki örnekle anlamaya çalışalım:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
Analoji: İki yatak odalı bir daireniz olduğunu ve başka bir oda arkadaşı ile paylaştığınızı varsayalım. Ortak alana, yatak odanızdan değil herkes tarafından erişilebilir, ortam değişkeni ortak alan ve kabuk değişkeni yatak odası gibidir, eğer ortak bir alanda olacaksanız herkes tarafından erişilebilir, ancak yatak odanızda tutulursa sizin tarafınızdan erişilebilir.
Yeni bir terminal açarsanız, bu örneği değiştirdiğiniz için değişkenlerin hiçbirine erişemeyeceksiniz . Bunun için değişkenlerinizi .profile
veya eklemeniz gerekir .bashrc
(bash kullanıyorsanız).