Pada dasarnya Anda memiliki dua opsi:
- Jadikan variabel sebagai variabel lingkungan (
export TESTVARIABLE
) sebelum menjalankan skrip ke-2.
- Sumber skrip ke-2, yaitu
. test2.sh
dan akan berjalan di shell yang sama. Ini akan memungkinkan Anda berbagi variabel yang lebih kompleks seperti array dengan mudah, tetapi juga berarti bahwa skrip lain dapat memodifikasi variabel dalam shell sumber.
MEMPERBARUI:
Untuk menggunakan export
untuk mengatur variabel lingkungan, Anda dapat menggunakan variabel yang sudah ada:
A=10
# ...
export A
Ini harus bekerja di keduanya bash
dan sh
. bash
juga memungkinkan untuk digabungkan seperti:
export A=10
Ini juga berfungsi di saya sh
(yang kebetulan bash
, dapat Anda gunakan echo $SHELL
untuk memeriksa). Tapi saya tidak percaya itu dijamin akan berhasil sh
, jadi sebaiknya mainkan dengan aman dan pisahkan.
Setiap variabel yang Anda ekspor dengan cara ini akan terlihat dalam skrip yang Anda jalankan, misalnya:
Abu:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Kemudian:
$ ./a.sh
The message is: hello
Fakta bahwa keduanya adalah skrip shell juga hanya kebetulan. Variabel lingkungan dapat diteruskan ke proses apa pun yang Anda jalankan, misalnya jika kami menggunakan python, akan terlihat seperti:
Abu:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Sumber:
Sebaliknya, kita dapat sumber seperti ini:
Abu:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Kemudian:
$ ./a.sh
The message is: hello
Ini lebih atau kurang "mengimpor" konten b.sh
secara langsung dan mengeksekusi di shell yang sama . Perhatikan bahwa kami tidak perlu mengekspor variabel untuk mengaksesnya. Ini secara implisit membagikan semua variabel yang Anda miliki, serta memungkinkan skrip lain untuk menambah / menghapus / memodifikasi variabel dalam shell. Tentu saja, dalam model ini kedua skrip Anda harus bahasa yang sama ( sh
atau bash
). Untuk memberi contoh bagaimana kita bisa meneruskan pesan bolak-balik:
Abu:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Kemudian:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Ini berfungsi sama baiknya di bash
. Ini juga memudahkan untuk berbagi data yang lebih kompleks yang tidak dapat Anda ungkapkan sebagai variabel lingkungan (setidaknya tanpa beban berat di pihak Anda), seperti array atau array asosiatif.