2008-11-20 10 views

Odpowiedz

5

Jest to jedyny sposób wiem, aby robić to, co chcesz:

W foo.sh, masz:

#!/bin/bash 
echo MYVAR=abc123 

A gdy chcesz uzyskać wartość zmiennej, trzeba aby wykonać następujące czynności:

$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH 
$ echo $MYVAR #==> abc123 

w zależności od tego, co chcesz zrobić, i jak chcesz to zrobić, sugestia Douglas Leeder na temat korzystania ze źródła może być używany, ale będzie zaopatrywać cały plik, funkcje i wszystko. Używając eval, oceniane będą tylko te rzeczy, które otrzymają echo.

+0

właśnie staramy się robić to sam. Miałem eval i $ (foo), z wyjątkiem tego, że opuściłem cytaty dotyczące argumentu eval. Nie działa. Dzięki za poprawkę składni. – jmanning2k

13

Niezupełnie - po uruchomieniu w podprocesie nie można wpłynąć na rodzica.

tam dwie możliwości:

1) Źródło skryptu zamiast go uruchomić (patrz source .):

 
    source {script} 

2) mają wyjścia skrypt poleceń eksportowych, a eval że:

 
    eval `bash {script}` 
OR: 
    eval "$(bash script.sh)" 

EDYCJA: Poprawiono drugą opcję, która ma być wartością eval, a nie źródłem. Opps.

1

Ustaw zmienną w/etc/profile (w razie potrzeby utwórz plik). To zasadniczo sprawi, że zmienna będzie dostępna dla każdego procesu basha.

0

Ustaw zmienną w/etc/profile (w razie potrzeby utwórz plik). To zasadniczo sprawi, że zmienna będzie dostępna dla każdego procesu basha.

... do każdego nowego procesu bash ...