Bir dosyadan değişkenleri nasıl dışa aktarabilirim?


80

tmp.txtDışa aktarılacak değişkenleri içeren bir dosya var , örneğin:

a=123
b="hello world"
c="one more variable"

Tüm bu değişkenleri exportkomutu kullanarak nasıl dışa aktarabilirim ki daha sonra alt işlemler tarafından kullanılabilirler?


1
bash --init-file somefile.blah -c "komut"
Dillian Murphey

SO nasıl yararlı bir cevabı vardır otomatik kaynak .envdosyaları zaman cdbir dizine.
Dan Dascalescu

@Neerav Lütfen diğer cevabı kabul edin. Bu çok daha iyi bir çözüm.
coderDude

Yanıtlar:


65
source tmp.txt
export a b c
./child ...

Diğer sorunuza bakılırsa, değişken isimlerini kodlamak istemezsiniz:

source tmp.txt
export $(cut -d= -f1 tmp.txt)

Dene:

$ source tmp.txt
$ echo "$a $b $c"
123 hello world one more variable
$ perl -E 'say "@ENV{qw(a b c)}"'

$ export $(cut -d= -f1 tmp.txt)
$ perl -E 'say "@ENV{qw(a b c)}"'
123 hello world one more variable

2
Örneğin, çevre dosyası yorumlar içeriyorsa bu işe yaramaz. (örn., systemd'nin EnvironmentFile tarafından yeniden kullanılabilen dosyalar)
Chris Lamb

3
@ChrisLamb grepyorumları atlamak için kullanabilirsiniz :export $(grep --regexp ^[A-Z] tmp.txt | cut -d= -f1)
gvee

182
set -a
. ./tmp.txt
set +a

set -aBundan sonra tanımlanan değişkenlerin otomatik olarak dışa aktarılmasına neden olur. Bourne benzeri bir kabuğun içinde bulunur. .standart ve Bourne adıdır sourceBen taşınabilirlik (için tercih böylece komuta sourcegelir cshve gibi en modern Bourne benzeri kabuklarda artık kullanılabilir bash(bazen) biraz daha farklı bir davranış ile olsa da).

POSIX kabuklarında, set -o allexportyazmak için ( set +o allexporttanımsız) daha açıklayıcı bir alternatif yöntem de kullanabilirsiniz .


¹ Ayrıca bash, çevreye dışa aktarılırken bildirilen tüm işlevlerin de allexport(bunun gibi çalışırken bile o ortamda çalışan BASH_FUNC_myfunction%%tüm bashkabuklar tarafından içe aktarılan ortam değişkenleri olarak) neden olduğuna dikkat edin sh.


1

Sadece yap:

while read LINE; do export "$LINE"; done < ./tmp.txt

İşe yarayıp yaramadığını kontrol ettin mi?
RalfFriedl

@RalfFriedl bu çalışmalı, neden olmasın? Çok zarif değil ve kaynak bulmak set -açok daha kolay olurdu, ama bu gerçekten işe yarıyor.
terdon

Bu kırılgan. Giriş dosyasındaki yorumlara izin vermiyor, alıntılanan değişken değerlerini doğru işlemiyor ve çok satırlı değişkenlerde başarısız oluyor. Verilen Çok satırlı değişkenim yok, ancak yorumları düzenli olarak kullanıyorum ve genellikle değişken değerler için tırnak kullanmam gerekiyor.
Louis

Benim için çalıştı.
mchawre
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.