Mam dwa niezależnie uruchomione skrypty. Najpierw powiedzmy, że skrypt A oblicza pewne wartości. I chcę echo tych wartości z innego skryptu o nazwie B. Te skrypty nie będą nawiązywać się nawzajem. Użyłem słowa kluczowego eksportu, ale nie działało. Jak mogę to zrobić?Eksportowanie zmiennych między skryptem powłoki
Odpowiedz
Gdybym rozumiał wymaganie to może nie oba skrypty być po prostu wykonane w tej samej powłoce sub, niezależnie jednak bez nazywając siebie lub bez potrzeby zewnętrznego pliku lub rury jak ten:
Powiedzmy jest to Twoja script1.sh
#!/bin/bash
# script1.sh: do something and finally
export x=19
I tu nam swoją script2.sh
#!/bin/bash
# script2.sh: read value of $x here
echo "x="${x}
Wystarczy zadzwonić do nich w tym samym sub-shell jak ten
(. ./script1.sh && ./script2.sh)
wyjściowa:
x=19
Nie możesz odczytać trzeciego pliku, powiedzmy settings.sh ze wspólnymi wyeksportowanymi zmiennymi?
# common.sh
export MY_PATH=/home/foo/bar/
export VERSION=42.2a
i zarówno w A, jak i B source common.sh
, aby załadować te wartości.
Uwaga: w takim przypadku eksport może nie być wymagany.
Nie potrzebuję właściwie trzeciego pliku. – thetux4
Możesz wysyłać wartości do plików, a drugi skrypt może je czytać. Jeśli chcesz użyć go jako parametr do czegoś użyć odwrotnego aposthrophe:
echo `cat storedvalue`
Bądź ostrożny, jeśli dwa skrypty są uruchomione w tym samym czasie, mogą wystąpić problemy współbieżności, co może powodować rzadko pojawia się, mistyka- szukanie błędów.
Jak mogę przekazać zwracaną wartość skryptu A do skryptu B? – thetux4
mkfifo /tmp/channel
process_a.sh > /tmp/channel&
process_b.sh < /tmp/channel&
wait
Oczywiście można również po prostu przeczytać jedną linię, kiedy chcesz.
W bashu są kopie, które również mogą być tym, co chcesz. Losowy przykład z this page
# let the output of the coprocess go to stdout
{ coproc mycoproc { awk '{print "foo" $0;fflush()}' ;} >&3 ;} 3>&1
echo bar >&${mycoproc[1]}
foobar
ksh ma podobną funkcję, widocznie
Komunikacja pomiędzy oddzielnymi procesami jest najłatwiejsza w przypadku plików, a nazwana rura zapewnia poręczny interfejs podobny do pliku: 'A" FIFO "jest specjalnym typem pliku, który umożliwia niezależnym procesom komunikację." –
coproc jest interesujący. sprawdzę to. – thetux4
Pomyśl każdego skryptu jako funkcja: function A oblicza jakąś wartość i zwraca go. Nie wie, kto to nazwie. Funkcja B przyjmuje pewną wartość i echo. Nie obchodzi, kto wytworzył tę wartość. Tak, scenariusz A:
#!/bin/sh
# a.sh: Calculate something and return the result
echo 19
i skrypt B:
#!/bin/sh
# b.sh: Consume the calculated result, which passed in as $1
echo The result is $1
Dodać do nich wykonywalny:
chmod +x [ab].sh
Teraz możemy skleić je razem w wierszu poleceń:
$ b.sh $(a.sh)
The result is 19
Semantycznie, b.sh di d nie wywoływać a.sh. Zadzwoniłeś do a.sh i przekazałeś wynik do b.sh.
Właściwie wszystkie Twoje potrzeby jest source
można pominąć prefiks export
.
My use-case był środowisko plik specyficzne ustawienia, na przykład:
ciągu main_script.sh
THIS_DIR=`dirname $0`
source $THIS_DIR/config_vars.sh
# other commands
ciągu config_vars.sh
- 1. Eksportowanie zmiennych środowiskowych do powłoki Makefile
- 2. muzyka ze skryptem powłoki
- 3. Arytmetyczny problem ze skryptem powłoki
- 4. Co robi "eksportowanie" w programowaniu powłoki?
- 5. Tworzenie pliku z zawartością ze skryptem powłoki
- 6. Python: Eksportowanie zmiennych środowiskowych w podprocesie.Popen (..)
- 7. Dołączanie do crontab ze skryptem powłoki na Ubuntu
- 8. Jak mogę komunikować się ze skryptem obsługi powłoki programu Vagrant?
- 9. Zliczanie unikalnych wartości w kolumnie ze skryptem powłoki
- 10. Skrypt powłoki do ustawiania zmiennych środowiskowych
- 11. c makefile z poleceń powłoki i zmiennych
- 12. Używanie zmiennych w komendzie powłoki vim
- 13. Jak używać zmiennych powłoki w akcjach Makefile?
- 14. Jaka jest różnica między modułem a skryptem w Pythonie?
- 15. Jakie są różnice między skryptem mod_php i cgi php?
- 16. Rozszerzenie chrome: udostępnianie obiektu między skryptami treści a skryptem tła
- 17. XSL: przekazywanie zmiennych między szablonami
- 18. Jenkins - przekazywanie zmiennych między zadaniami?
- 19. Udostępnianie zmiennych między plikami Makefile
- 20. Używanie zmiennych globalnych między plikami?
- 21. Przekazywanie zmiennych między zasobami kucharz
- 22. Przekazywanie zmiennych między kontrolerami widoku
- 23. Python: Przekazywanie zmiennych między funkcjami
- 24. Problemy ze skryptem powłoki bash, próby wprowadzenia danych JSON zmiennej POST przy użyciu cURL
- 25. Jak używać zmiennych powłoki w poleceniu perl w skrypcie powłoki bash?
- 26. przekazywanie zmiennych z Pythona do skryptu powłoki bash poprzez os.system
- 27. Używanie zmiennych w skrypcie powłoki Python nie działa
- 28. Wstrzyknięcie otwartego okna ze skryptem
- 29. Jak uruchomić MinGW ze skryptem?
- 30. Udostępnianie zmiennych między modułami w JavaScript/node.js?
nie Will '. skrypt "załatwiać sprawę? (zobacz http://www.linuxquestions.org/questions/linux-newbie-8/how-to-export-environment-variable-from-a-bash-script-344057/) – mlvljr
@mlvljr Powinieneś zrobić to odpowiedź , ponieważ to było to, czego potrzebowałem. Dzięki. – Rebs
@AdamGriffiths Cóż, staram się uniknąć wyścigu punktowego reputacji;) – mlvljr