Bash builtin'leri 'set' ve 'export' ne yapar?


46

Ben Bash'in amacına setve amacına bağlı olarak bir miktar exportzararım var (ve muhtemelen diğer mermiler de sanırım).

Ortam değişkenlerini belirlemek için olduğunu düşünürdüm, ancak bu doğru olabilir VARIABLE=VALUE, değil mi?

Ayrıca yazarak setve exportkendi başlarına farklı değerler gösterir.

Peki amacı nedir?



Ben her zaman bash betiği ile aşağıdaki iki ile başlar. #! / usr / bin / env bash seti -euxo pipefail Bu bağlantı aynı güzelliği açıklar. coderwall.com/p/fkfaqq/…
147.3k

Yanıtlar:


50

exportmevcut sürecin çocuklarına ihracat, varsayılan olarak ihraç edilmez. Örneğin:

$ foo=bar
$ echo "$foo"
bar
$ bash -c 'echo "$foo"'

$ export foo
$ bash -c 'echo "$foo"'
bar

setÖte yandan, örneğin konum parametreleri gibi kabuk özelliklerini ayarlar.

$ set foo=baz
$ echo "$1"
foo=baz

Atanmadığına dikkat bazedin foo, bu basit bir konumsal parametre haline gelir. Yapabileceğiniz birçok şey setvar (çoğunlukla kabuk seçenekleri) help set.

Yazdırmaya gelince, exporthiçbir argüman olmadan çağrılan kabuk ortamındaki tüm değişkenleri yazdırır. setAyrıca değişkenleri yazdırır değil ihraç etti. Ayrıca başka nesneler de dışa aktarabilir (bunun taşınabilir olmadığını not etmelisiniz) help export.


Teşekkürler bu çok yararlı bir cevap. Bununla birlikte, http_proxy'yi sadece http_proxy = abc.com ile ayarladığımda , alt işlemlere görünür, örneğin dışa aktarmadan wget çalıştırma. Bu nasıl olabilir?
mydoghasworms

2
@ mydoghasworms İki olası nedeni. Bir, siz komutu olarak çalıştırıyorsunuz foo=bar command. Bu, tek bir komut için örtük bir dışa aktarmadır. İkinci olasılık, http_proxydeğiştirmeden önce ortamınızda zaten dışa aktarılmış olmasıdır.
Chris Down,

Ah evet, haklısın. Mükemmel, teşekkürler!
mydoghasworms

6

Bakınız help set: set, kabuk niteliklerini ve konumsal nitelikleri ayarlamak için kullanılır.

Dışa aktarılmayan değişkenler alt işlemler tarafından miras alınmaz. exportverme değişkenini işaretlemek için kullanılır.

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.