How to import a variable from another script?
Solution 1
First of all, be aware that var
and VAR
are different variables.
To answer your question the .
command is not bash-specific:
# a.sh
num=42
# b.sh
. ./a.sh
echo $num
The variables in "a" do not need to be exported.
http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins
Solution 2
Environment variables are only inherited from parent to child and not the other way round. In your example, b.sh calls a.sh, so a runs as a child of b. When a.sh exports var, it won't be seen by b.sh. Amend the logic so that the parent process exports the variable, e.g.
a.sh:
echo In a.sh...
VAR="test"
export VAR
./b.sh
b.sh:
echo In b.sh...
echo $VAR
Related videos on Youtube
Eero Aaltonen
Updated on September 18, 2022Comments
-
Eero Aaltonen over 1 year
I want to get a variable from another script, as demonstrated in this question on Stack Overflow:
How to reference a file for variables in a bash script
However, the answer uses the
source
command which is only available inbash
. I want to do this in a portable way.I have also tried
a.sh
export VAR="foo" echo "executing a"
b.sh
#!/bin/sh ./a.sh echo $VAR
But of course that does not work either. How to do this?
-
Eero Aaltonen almost 11 yearsThank you and excuse my typo. I was pretty surprised with the difference between
./a.sh
and. ./a.sh
. Care to explain the difference? -
Eero Aaltonen almost 11 yearsThank you, but I actually have
sharedDefs.sh
and two separate targets depending on it, so I need to have the dependencies this way. -
fiatux almost 11 yearsThe dot command (
.
orsource
) evaluates the script in your current shell. Executing the script first spawns a subshell, and any environment changes in the subshell are lost when the subshell exits -- a child process cannot alter the environment of its parent. -
fiatux almost 11 yearsbash has a handy
help
builtin to access the manual for a specific command -- seehelp .