Všiml jsem si v mém .bashrc
že některé řádky mají export
před nimi, jako je
export HISTTIMEFORMAT="%b-%d %H:%M "
...
export MYSQL_HISTFILE="/root/.mysql_history"
zatímco ostatní ne, jako například
HISTSIZE=100000
Zajímalo by mě, jestli je to zaprvé správné a zadruhé jaké je pravidlo pro použití export
v .bashrc
.
Přijatá odpověď:
Potřebujete pouze export
pro proměnné, které by měly být „viděny“ jinými programy, které spustíte v shellu, zatímco ty, které se používají pouze uvnitř samotného shellu, nemusí být export
vyd.
Manuová stránka říká toto:
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.
To lze demonstrovat pomocí následujícího:
$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh
$ export MYVAR="value-exported"
$ ./echo.sh
value-exported
Vysvětlení:
- Nejprve jsem nastavil
${MYVAR}
být proměnnou prostředí sMYVAR="value"
. Pomocíecho
Mohu echo jeho hodnotu, protože echo je součástí shellu. - Pak vytvořím
echo.sh
. To je malý skript, který v podstatě dělá to samé, jen opakuje${MYVAR}
, ale rozdíl je v tom, že poběží v jiném procesu, protože se jedná o samostatný skript. - Při volání
echo.sh
nevypíše nic, protože nový proces nedědí${MYVAR}
- Pak exportuji
${MYVAR}
do mého prostředí pomocíexport
klíčové slovo - Když nyní spustím stejný
echo.sh
znovu opakuje obsah${MYVAR}
protože to získává z prostředí
Abych odpověděl na vaši otázku:
Záleží, kde bude proměnná použita, zda ji musíte exportovat nebo ne.
Související:Jak exportovat protokoly chatu Google?
Odstraňování problémů s DNS. Campus Domain se při používání Campus Network nevyřeší?
Ssh – správná nastavení konfiguračního souboru Ssh pro tunelování ke 3. počítači?