.Bashrc dosyasında dışa aktarma kullanma


45

İçimdeki .bashrcbazı çizgilerin exportönünde olduğunu fark ettim.

export HISTTIMEFORMAT="%b-%d  %H:%M  "
...
export MYSQL_HISTFILE="/root/.mysql_history"

oysa diğerleri değil

HISTSIZE=100000

Ben kural kullanmak için ne ikinci, birinci, bu doğru olup olmadığını merak ve ediyorum exportiçinde .bashrc.

Yanıtlar:


53

Yalnızca exportkabukta başlattığınız diğer programlar tarafından "görülmesi" gereken değişkenlere ihtiyacınız olur , oysa sadece kabuk içinde kullanılanların kullanılması gerekmez export.

Bu man sayfasının söylediği şey:

The  supplied  names are marked for automatic export to the environ‐
ment of subsequently executed commands.  If the -f option is  given,
the  names  refer to functions.  If no names are given, or if the -p
option is supplied, a list of all names that are  exported  in  this
shell  is  printed.   The -n option causes the export property to be
removed from each name.  If a variable name is  followed  by  =word,
the  value  of  the variable is set to word.  export returns an exit
status of 0 unless an invalid option  is  encountered,  one  of  the
names  is  not a valid shell variable name, or -f is supplied with a
name that is not a function.

Bu, aşağıdakilerle gösterilebilir:

$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh

$ export MYVAR="value-exported"
$ ./echo.sh
value-exported

Açıklama:

  • İlk ${MYVAR}önce bir Shell değişkeni olarak ayarlıyorum MYVAR="value". Kullanılması echoyankı kabuğun bir parçası olduğu için bunun değerini yankı.
  • Sonra ben yaratırım echo.sh. Bu temelde aynı olan küçük bir senaryo, sadece yankılanıyor ${MYVAR}, ancak fark, farklı bir süreçte çalışması çünkü ayrı bir komut dosyası.
  • Çağrılırken echo.shyeni süreç kaynaklanan devralma değil, bunun nedeni çıkışlar şey${MYVAR}
  • Sonra anahtar kelimeyle çevreme ihracat ${MYVAR}yapıyorumexport
  • Şimdi aynı şeyi echo.shtekrar çalıştırdığımda ${MYVAR}, ortamdan aldığı için içeriğini tekrarlıyor

Yani sorunuzu cevaplamak için:

Bir değişkenin nerede kullanılacağına, dışa aktarmanız gerekip gerekmediğine bağlıdır.


17

Ortam değişkenleriexport için kullanın . Ortam değişkenleri bir işletim sistemi özelliğidir. Ortam değişkenleri alt süreçler tarafından miras alınır: onları bir kabuğa ayarlarsanız, bu kabuğun başlattığı tüm programlarda kullanılabilir. Birçok uygulama tarafından veya mermiler dışındaki özel uygulamalar tarafından kullanılan değişkenler, ortam değişkenleridir. İşte ortak ortam değişkenlerine birkaç örnek:

  • HOME- kullanıcının yapılandırma dosyalarının bulunduğu kullanıcının ana dizini gösterir. Kullanıcı başına yapılandırma dosyalarını okuyan veya kullanıcının ana dizininin konumunu bilmesi gereken herhangi bir program tarafından kullanılır.
  • PATH- diğer programları başlatmak için yürütülebilir dosyaları nerede bulacağınızı gösterir. Başka bir program başlatması gereken her program tarafından kullanılır.
  • LD_LIBRARY_PATH- dinamik kütüphane dosyalarının nerede bulunacağını gösterir. Dinamik olarak bağlı her çalıştırılabilir dosya tarafından kullanılır.
  • EDITOR, VISUAL- bir editör gerektiğinde hangi programın çalıştırılacağını gösterir. Bir metin editörü başlatmak için gereken herhangi bir program tarafından kullanılır.
  • DISPLAY, XAUTHORITY- X11 sunucusuna nasıl bağlanılacağını gösterir. X11 istemcileri tarafından kullanılır (örn. GUI programları).
  • LESS- lessçalıştırıldığında seçenekler otomatik olarak açılır . Tarafından kullanılır less.
  • http_proxy- kullanılacak web proxy'sini gösterir. Çoğu web tarayıcısı tarafından kullanılır.

exportKabuk değişkenleri için kullanmayın . Kabuk değişkenleri bir programlama dili olarak kabuğun bir özelliğidir. Kabuk değişkenleri yalnızca ayarlandıkları kabuğun içinde kullanılır; kabuk tarafından başlatılan programlar için hiçbir anlamı yoktur. Kabuk değişkenleri, kabuk durumunun geri kalanında olduğu gibi bir alt kabuk oluşturulduğunda çoğaltılır. Popüler kabuklara bir anlamı olan kabuk değişkenlerine birkaç örnek:

  • PS1 - her komuttan önce gösterilecek bilgi istemi.
  • IFS - tırnak işareti olmayan değişken açılımlarında ve komut değiştirmelerinde sözcükleri ayıran karakterler.
  • HISTFILE - kabuğun komut geçmişini yazacağı bir dosya.

Kabuk tarafından kullanılan değişkenlere ek olarak, çoğu kabuk komut dosyası kendi iç amaçları için değişkenler kullanır.

Çoğu ortam değişkeni (örn. PATH) Bütün bir oturum için anlamlıdır ve buna ~/.profilebenzer bir dosyada ayarlanması gerekir . Sadece belirli bir kabuğa (örneğin PS1) anlam ifade eden değişkenler, ~/.bashrcya da gibi kabuğa özgü bir dosyada ayarlanmalıdır ~/.zshrc. Bkz . Tüm kabukları tarafından okunan bir ".bashrc" eşdeğer dosyası var mı?


3

Bash dahili değişkenleri için ihtiyacınız yoktur export. Sizin örnekten HISTTIMEFORMATbash kendisi tarafından kullanılır ve bir ihracat ihtiyacı yoktur MYSQL_HISTFILEiçindir mysqlve ihtiyaçları aksi ihracat olduğunu mysqlgörmüyor.

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.