Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: alfonz19 13 Února 2013, 22:03:20
-
Ahoj,
pokud v .bashrc napíšu
export A=1
a spustím nový bash, proměnná bude přístupná.
Pokud v .bashrc napíšu
./testExport
a vytvořím soubor testExport takto:
#!/bin/bash
export B=2
a otevřu nový shell, pak proměnná B bude nedefinovaná.
Mám pocit, že jsem to NĚJAK kdysi zprovoznil, ale nevím kde mám teď chybku. Anebo se pletu a nemohlo to fungovat nikdy?
EDIT: práva pro spuštění testExport jsou přidělena.
-
./testExport je relativní cesta, asi bych ji nepoužíval
pokud se jedná jen o export tak bych ho tam napsal přímo
-
Snažil jsem se o maximálně snadný popis problému. rozeberu to.
v .bashrc mám absolutní cesty, spouštěný skript vezme zvolený adresář (adresář, který obsahuje strukturu s různými skripty), projde je, najde všechny podadresáře a přidá je na PATH. Smyslem je mít možnost selektivně přidat nějakou množinu skriptů na path (proto je jejich přidání v samostatném skriptu) a nemít bordel v .bashrc.
částečně to "funguje" a mám pocit, že dříve to fungovalo komplet. Problém je v tom, že volaný skript exportuje PATH, když ji pak vypíšu je korektní, ale nastartování bashe je PATH opět v původním stavu.
napadá mne možná kolize např. s /etc/profile. V jakém pořadí se spouští tyto skripty při startu nového bashe? Nebo napadá někoho jiný důvod pro toto chování?
-
A kdyby se nahradilo
./testExport
za
~/testExport nebo za /home/user/testExport?
-
v úvodním textu jsem se snažil o maximální stručnost.
ve skutečnosti tam mám absolutní cestu.
skript se volá.
po nastartování bashe ovšem proměnná, která těsně před jeho koncem byla nastavena a exportována, nastavena opět není.
-
v úvodním textu jsem se snažil o maximální stručnost.
ve skutečnosti tam mám absolutní cestu.
skript se volá.
po nastartování bashe ovšem proměnná, která těsně před jeho koncem byla nastavena a exportována, nastavena opět není.
Co ja viem, tak nie je mozne z podriadeneho shellu nastavovat premennu platnu pre rodica.
-
a) include souboru se dela pomoci prikazu ".", tedy potrebujes:
. $jmeno_souboru
b) pokud spustis soubor via:
./$jmeno_souboru
a forknes dalsi /bin/bash, tak je jasne, ze rodic nevidi do jeho @ENV
-
ANO!
Ježiši marjá, děkuju, já jsem trubka. Tuhle konstrukci (include) jsem sice naivně znal, ale nedocházely mi všechny rozdíly a že v mém volání dojde k forku a tedy to takto nemohu použít mi nedošlo.
DÍKY MOC!