Pertanyaan Variabel lingkungan global dalam skrip shell


Bagaimana mengatur variabel lingkungan global dalam skrip bash?

Jika saya melakukan hal-hal seperti itu

#!/bin/bash
FOO=bar

...atau

#!/bin/bash
export FOO=bar

... vars tampaknya tetap dalam konteks lokal, sedangkan saya ingin tetap menggunakannya setelah skrip selesai dieksekusi.


76
2017-09-23 06:25


asal


Jawaban:


Jalankan skrip Anda dengan . 

. myscript.sh

Ini akan menjalankan skrip di lingkungan shell saat ini.

export mengatur variabel mana yang akan tersedia untuk proses baru, jadi jika Anda mengatakannya

FOO=1
export BAR=2
./runScript.sh

kemudian $BAR akan tersedia di lingkungan runScript.sh, tapi $FOO tidak akan.


124
2017-09-23 06:28



Ketika kamu menjalankan skrip shell, itu dilakukan dalam sub-shell sehingga tidak dapat mempengaruhi lingkungan shell induk. Anda ingin sumber skrip dengan melakukan:

. ./setfoo.sh

Ini mengeksekusinya dalam konteks arus shell, bukan sebagai sub kulit.

Dari halaman manual bash:

. nama file [argumen]
nama file sumber [argumen]

Baca dan jalankan perintah dari nama file di shell saat ini   lingkungan dan mengembalikan status keluar dari perintah terakhir yang dijalankan   dari nama file.

Jika nama file tidak mengandung slash, nama file di PATH digunakan untuk   temukan direktori yang berisi nama file.

File yang dicari dalam PATH tidak perlu dieksekusi. Ketika bash tidak   dalam mode POSIX, direktori saat ini dicari jika tidak ada file yang ditemukan   di PATH.

Jika opsi sourcepath ke perintah shopt builtin dimatikan,   PATH tidak dicari.

Jika ada argumen yang disediakan, mereka menjadi parameter posisional   ketika nama file dieksekusi.

Jika tidak, parameter posisi tidak berubah. Status kembalinya   adalah status perintah terakhir yang keluar dalam skrip (0 jika tidak   perintah dieksekusi), dan salah jika nama file tidak ditemukan atau tidak bisa   Bacalah.


47
2017-09-23 06:29



source myscript.sh juga layak.

Deskripsi untuk perintah linux source:

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context

6
2017-09-01 00:48



#!/bin/bash
export FOO=bar

atau

#!/bin/bash
FOO=bar
export FOO

ekspor manusia:

Shell harus memberikan atribut ekspor ke variabel yang sesuai dengan nama yang ditentukan, yang akan menyebabkannya berada di lingkungan perintah yang dieksekusi selanjutnya. Jika nama variabel diikuti oleh = kata, maka nilai variabel itu harus diatur ke kata.


4
2017-09-23 06:33



FOO=bar
export FOO

-3
2017-09-23 06:27