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.she 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 exportper impostare una variabile di ambiente, è possibile utilizzare una variabile esistente:
A=10
# ...
export A
Questo dovrebbe funzionare in entrambi bashe sh. bashconsente inoltre di combinarlo in questo modo:
export A=10
Questo funziona anche nel mio sh (che sembra essere bash, è possibile utilizzare echo $SHELLper 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.shdirettamente 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 ( sho 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.