export w bashu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

export w bashu

Post autor: sauron »

Uczę się basha i napotkałem pewien problem, a mianowicie nie działającą komendę export.
Załóżmy że chcę wyeksportować zmienną o nazwie ZMIENNA i nadać jej wartość np. 1
jeżeli zrobię to z konsoli

Kod: Zaznacz cały

export ZMIENNA=1
to wszystko działa i jak uruchomię komendę env to wyświetla tą zmienną
ale jeżeli zrobię to ze skryptu (takiego prostego)

Kod: Zaznacz cały

#!/bin/bash
export ZMIENNA=1
to już nie działa, w env nie pokazuje, ale jak dodałem do skryptu powyżej

Kod: Zaznacz cały

echo $ZMIENNA
to wyświetliło jak należy, ale w env dalej tego nie było.

Według mnie to jest coś nie tak z export, bo wartość przypisuje ale po zakończeniu skryptu zmienna i wartość znika z pamięci :(
Proszę o jakąś pomoc, czego to może być wina?
Dodam że patrzyłem w tekstowej powłoce tty1 także i tam też nie działało.
Awatar użytkownika
Nadril
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 171
Rejestracja: 11 lip 2008, 10:54
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86_64
Kontakt:

Odp: export w bashu

Post autor: Nadril »

export działa dobrze, tyle osób z niego korzysta, że jakby nie działał, to ktoś by zauważył. :)

przykład:

Kod: Zaznacz cały

michal@michal-laptop:~$ echo "env | grep ZMIENNA"; env | grep ZMIENNA; echo "export ZMIENNA=1" > test.sh; sh test.sh ; echo "env po odpaleniu exportu"; env | grep ZMIENNA; echo "env" >>test.sh; echo "env w skrypcie"; sh test.sh | grep ZMIENNA
env | grep ZMIENNA
env po odpaleniu exportu
env w skrypcie
ZMIENNA=1
Z myślisz, że nie działa bo nie wiesz jak działa.
Wycienek z dokumentacji:
A script can export variables only to child processes, that is, only to commands or
processes which that particular script initiates. A script invoked from the
command-line cannot export variables back to the command-line environment.
Child processes cannot export variables back to the parent processes that spawned
them.
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: export w bashu

Post autor: leon1313 »

export command- Set an environment variable

Syntax: export [-fn] [-p] [name[=value]]

Description: The export command makes available variables to all child processes of the running script or shell. .

Czyli mówiąc po chłopskiemu przekazuje zmienne do procesów potomnych...
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: export w bashu

Post autor: beluosus »

Jeśli chcesz korzystać ze zmiennych umieszczonych w pliku to możesz np. użyć polecenia eval.
Przykładowa zawartość pliku zmienne:

Kod: Zaznacz cały

export NO=123
export TEXT="lorem ipsum"

Kod: Zaznacz cały

eval $(<zmienne)
echo $TEXT
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: export w bashu

Post autor: sauron »

Dzięki za rozjaśnienie, uczę się z książki Bash Cookbook w j. angielskim i coraz bardziej mnie ta książka denerwuje, nie pomyślałem o sprawdzeniu dokumentacji export, bo na temat exportu w tej książce w bieżącym rozdziale były 3 strony, ale nie napisali, że procesy mają być pokrewne. Ta książka opisuje to mało wyraźnie i przejrzyście.
tu jest cytat,
But sometimes you do want the information passed along. In those cases, you can export the variable so that its value is passed along to any other program that it invokes.
If you want to see a list of all the exported variables, just type the built-in command env (or export -p) for a list of each variable and its value.
Jest napisane to any program that it invokes i tym się sugerowałem.

Ale czy istnieje możliwość wyexportowania zmiennej przez jeden skrypt i odczytania jej przez drugi (jak to było opisane w książce - tylko szkoda że to tak nie działa)? Chodzi o taką kolej rzeczy 1.uruchomienie skryptu pierwszego (zawierającego export ZMIENNA=1); 2. uruchomienie skryptu drugiego który zawiera echo $ZMIENNA; i żeby to wszystko zadziałało? (Inna metoda niż z eval)
Bo eval musiałem dodać na początku 2 skryptu, ale wtedy w ogóle uruchamianie pierwszego mija się z celem jeżeli eval z 2 odczyta sobie zmienną.
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: export w bashu

Post autor: leon1313 »

Heh, generalnie Linux dosyć dobrze wspiera różne systemy plików, możesz zapisać zmienne w pliku w /tmp lub innym katalogu (kolejka fifo? )
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: export w bashu

Post autor: sauron »

Ale jeżeli miałbym zapisać te zmienne w jakimś pliku w /tmp to i tak bym musiał odczytać później w drugim skrypcie za pomocą eval z tego pliku, czyż nie?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: export w bashu

Post autor: beluosus »

sauron pisze:Ale jeżeli miałbym zapisać te zmienne w jakimś pliku w /tmp to i tak bym musiał odczytać później w drugim skrypcie za pomocą eval z tego pliku, czyż nie?
sauron pisze: (Inna metoda niż z eval)
Bo eval musiałem dodać na początku 2 skryptu, ale wtedy w ogóle uruchamianie pierwszego mija się z celem jeżeli eval z 2 odczyta sobie zmienną.
Skoro mija się z celem to może uruchomienie pierwszego w ogóle nie jest potrzebne? Co to za problem w jednym skrypcie wrzucić zmienne do pliku, a w drugim te zmienne z pliku odczytać? Coś mi się wydaje, że za bardzo kombinujesz. ;)
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: export w bashu

Post autor: sauron »

Kombinuję, ale czysto teoretycznie, gdyż uczę się bash'a jak napisałem w pierwszym poście.
Poznanie pochodzi z doświadczenia.
Archimedes
Więc eksperymentuję i chcę zdobyć wiedzę, bo
Dzięki wiedzy jesteśmy skuteczni w działaniu.
oraz
Wiedza usprawnia nasze myślenie.
Pozdrawiam
sauron :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości