Passaggio della variabile dalla shell genitore a quella figlia tramite script di shell

Aug 24 2020

Sulla shell madre (root) eseguendo quanto segue:

SESSION_RECORD=started

Uscita :

echo $SESSION_RECORD
started

Tuttavia, quando controllo lo stato da uno script di shell, il valore non viene assegnato. Sono consapevole che crea un figlio ed esegue lo script, motivo per cui non accetta la variabile.

C'è un modo per importarlo dalla shell genitore alla shell figlia? Non voglio usare l'esportazione poiché la variabile radice è dinamica.

script per ref:

#!/bin/bash

session=`echo $SESSION_RECORD`
echo $session
if [ "$session" == "started" ]
then
echo "screen records"
else
echo "screen not started"
fi

Fondamentalmente, il mio script dovrebbe controllare il valore della variabile e se corrisponde dovrebbe entrare nel ciclo ed eseguire ulteriormente i comandi.

Il valore della variabile SESSION_RECORDcambia in modo dinamico, quindi in base al valore, devo eseguire uno script.

Risposte

2 seumasmac Aug 24 2020 at 18:28

Non è necessario impostare il valore di una variabile quando la esporti. Tu puoi fare:

SESSION_RECORD=started
echo "Now some other stuff"
export SESSION_RECORD && ./myscript

e esporterà il valore corrente di SESSION_RECORDnel tuo script.

Invidian Aug 24 2020 at 17:59

Se rendi il tuo script una funzione, allora non creerà una subshell durante l'esecuzione, quindi l'accesso alla variabile dovrebbe funzionare bene. Forse funzionerebbe per te?

Esempio:

$ cat test.sh
#!/bin/bash

function foo() {
  echo $foo
}
$ source test.sh
$ foo=5
$ foo
5
$ foo=4
$ foo
4
$