Hai sostanzialmente due opzioni:
- Trasforma la variabile in una variabile d'ambiente (
export TESTVARIABLE
) prima di eseguire il secondo script.
- Sorgente il 2o script, ovvero
. test2.sh
e verrà eseguito nella stessa shell. Ciò consentirebbe di condividere facilmente variabili più complesse come array, ma significa anche che l'altro script potrebbe modificare le variabili nella shell di origine.
AGGIORNARE:
Per utilizzare export
per impostare una variabile di ambiente, è possibile utilizzare una variabile esistente:
A=10
# ...
export A
Questo dovrebbe funzionare in entrambi bash
e sh
. bash
consente inoltre di combinarlo in questo modo:
export A=10
Questo funziona anche nel mio sh
(che sembra essere bash
, è possibile utilizzare echo $SHELL
per controllare). Ma non credo che sia garantito per funzionare in tutto sh
, quindi è meglio giocarci in modo sicuro e separarli.
Qualsiasi variabile esportata in questo modo sarà visibile negli script eseguiti, ad esempio:
cenere:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Poi:
$ ./a.sh
The message is: hello
Il fatto che questi siano entrambi script di shell è anche casuale. Le variabili di ambiente possono essere passate a qualsiasi processo eseguito, ad esempio se utilizzassimo Python invece potrebbe apparire come:
cenere:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Reperimento:
Invece potremmo procurarci in questo modo:
cenere:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Poi:
$ ./a.sh
The message is: hello
Questo più o meno "importa" b.sh
direttamente il contenuto e lo esegue nella stessa shell . Si noti che non è stato necessario esportare la variabile per accedervi. Ciò condivide implicitamente tutte le variabili che hai, oltre a consentire agli altri script di aggiungere / eliminare / modificare le variabili nella shell. Naturalmente, in questo modello entrambi gli script dovrebbero avere la stessa lingua ( sh
o bash
). Per fare un esempio di come possiamo passare i messaggi avanti e indietro:
cenere:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Poi:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Funziona ugualmente bene in bash
. Inoltre, semplifica la condivisione di dati più complessi che non è possibile esprimere come una variabile di ambiente (almeno senza un pesante sollevamento da parte dell'utente), come array o array associativi.