Ho notato nel mio .bashrc
che alcune righe hanno export
davanti a loro, come
export HISTTIMEFORMAT="%b-%d %H:%M "
...
export MYSQL_HISTFILE="/root/.mysql_history"
mentre altri no, come
HISTSIZE=100000
Mi chiedo se, in primo luogo, questo è corretto e in secondo luogo qual è la regola per l'utilizzo di export
in .bashrc
.
Risposta accettata:
Hai solo bisogno di export
per le variabili che dovrebbero essere "viste" da altri programmi che avvii nella shell, mentre quelle che vengono utilizzate solo all'interno della shell stessa non devono essere export
ed.
Questo è ciò che dice la pagina man:
The supplied names are marked for automatic export to the environ‐
ment of subsequently executed commands. If the -f option is given,
the names refer to functions. If no names are given, or if the -p
option is supplied, a list of all names that are exported in this
shell is printed. The -n option causes the export property to be
removed from each name. If a variable name is followed by =word,
the value of the variable is set to word. export returns an exit
status of 0 unless an invalid option is encountered, one of the
names is not a valid shell variable name, or -f is supplied with a
name that is not a function.
Questo può essere dimostrato con quanto segue:
$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh
$ export MYVAR="value-exported"
$ ./echo.sh
value-exported
Spiegazione:
- Ho prima impostato
${MYVAR}
essere una variabile Shell conMYVAR="value"
. Usandoecho
Posso fare eco al suo valore perché l'eco fa parte della shell. - Poi creo
echo.sh
. Questo è un piccolo script che sostanzialmente fa lo stesso, fa solo eco a${MYVAR}
, ma la differenza è che verrà eseguito in un processo diverso perché è uno script separato. - Quando si chiama
echo.sh
non restituisce nulla, perché il nuovo processo non eredita${MYVAR}
- Quindi esporto
${MYVAR}
nel mio ambiente conexport
parola chiave - Quando ora eseguo lo stesso
echo.sh
di nuovo, fa eco al contenuto di${MYVAR}
perché lo ottiene dall'ambiente
Quindi, per rispondere alla tua domanda:
Dipende da dove verrà utilizzata una variabile, se devi esportarla o meno.
Correlati:come esportare i registri della chat di Google??