Řešení 1:
Nejlepší způsob
export VAR=value
Rozdíl
Dělám
VAR=value
nastavuje proměnnou pouze na dobu trvání skriptu (.bashrc
v tomto případě). Podřízené procesy (pokud existují) skriptu nebudou mít definovaný VAR a jakmile skript skončí VAR
je pryč.
export VAR=value
explicitně přidá VAR
na seznam proměnných, které jsou předány podřízeným procesům. Chcete to zkusit? Otevřete shell, proveďte
PS1="foo > "
bash --norc
Nový shell dostane výchozí výzvu. Pokud místo toho uděláte něco jako
export PS1="foo > "
bash --norc
nový shell dostane výzvu, kterou jste právě nastavili.
Aktualizace: jak poznamenává Ian Kelling níže, proměnné nastavené v .bashrc
přetrvávají v shellu, který pochází z .bashrc
. Obecněji vždy, když shell získává skript (pomocí source scriptname
příkaz) proměnné nastavené ve skriptu přetrvávají po dobu životnosti shellu.
Řešení 2:
Zdá se, že obojí funguje dobře, ale použití exportu zajistí, že proměnná bude dostupná pro podskořápky a další programy. Chcete-li to vyzkoušet, zkuste toto.
Přidejte tyto dva řádky do svého souboru .bashrc
TESTVAR="no export"
export MYTESTVAR="with export"
Poté otevřete nový shell.
Spuštěn echo $TESTVAR
a echo $MYTESTVAR
zobrazí obsah každé proměnné. Nyní ve stejném shellu odstraňte tyto dva řádky ze souboru .bashrc a spusťte bash
pro spuštění podshell.
Spuštěn echo $TESTVAR
bude mít prázdný výstup, ale běží echo $MYTESTVAR
zobrazí "s exportem"