2012-05-28 8 views
25

Ho due script 1.sh e 2.sh.esportazione non funziona nello script shell

1.sh è la seguente:

#!/bin/sh 
variable="thisisit" 
export variable 

2.sh è la seguente:

#!/bin/sh 
echo $variable 

Secondo quanto ho letto, facendo in questo modo (esportazione) può accedere alle variabili in uno script di shell da un altro. Ma questo non funziona nei miei script. Qualcuno può aiutare, per favore. Grazie in anticipo.

+0

e come stai eseguendo questi script di shell? – linuxeasy

+0

vedere anche: http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip#176788 e http: // unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b – lesmana

+0

Per prima cosa eseguo 1.sh nel terminale, quindi eseguo il 2.sh nello stesso terminale. .. – Xander

risposta

5

export inserisce una variabile nell'ambiente della shell in esecuzione in modo che venga passata ai processi eseguiti dallo script, ma non al processo che chiama lo script o altri processi. Prova esecuzione

#!/bin/sh 
FOO=bar 
env | grep '^FOO=' 

e

#!/bin/sh 
FOO=bar 
export FOO 
env | grep '^FOO=' 

per vedere l'effetto di export.

Per ottenere la variabile 1.sh-2.sh, sia chiamano 2.sh da 1.sh o importare 1.sh in 2.sh:

#!/bin/sh 
. ./1.sh 
echo $variable 
59

Se si sta eseguendo i file come sh 1.sh o ./1.sh Poi si sta eseguendo in un sub -conchiglia.

Se si desidera che le modifiche da apportare nella shell corrente, si potrebbe fare:

. 1.sh 
# OR 
source 1.sh 

perche non passare attraverso il reference-documentation.

"Quando uno script viene eseguito utilizzando source [o .] viene eseguito all'interno del guscio esistente, qualsiasi variabile creati o modificati dallo script rimarrà disponibile dopo il completamento dello script. Al contrario, se lo script viene eseguito come filename , quindi una subshell separata (con un set di variabili completamente separato) verrebbe generata per eseguire lo script. "

+0

L'OP utilizza '/ bin/sh', che su molte piattaforme è una shell POSIX minima e non supporterà il comando' source'. –

+0

hmmm .. Ho menzionato su '.' e' spazio'. Ho menzionato 'source' dato che è quello che vedo le persone usano al giorno d'oggi. – linuxeasy

+0

1.sh: 3: source: not found :( Non voglio che il mio 1.sh sia eseguito da 2.sh, voglio eseguire 1.sh prima, dopo averlo chiuso esegui 2.sh .. e accedi alla variabile dal primo al secondo .... Grazie per le risposte – Xander

Problemi correlati