GNU/Linux >> Znalost Linux >  >> Linux

Používáte export v .bashrc?

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í s MYVAR="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?
Linux
  1. Co dělá Echo $? Dělat??

  2. Základní dělení pomocí proměnné a celého čísla?

  3. Jak zapíšu znaky jiné než ASCII pomocí echa?

  1. Připojení k WiFi pomocí adb shell

  2. Jak trvale exportovat proměnnou v Linuxu?

  3. Iterujte přes proměnnou $PATH pomocí skriptu shellu

  1. Použití UFW jako IP Blacklist

  2. Zachycování chyb při substituci příkazů pomocí „-o Errtrace“ (tj. Set -e)?

  3. Instalace a používání XeTeXu