你基本上有两种选择:
- 在执行第二个脚本之前将变量设为环境变量 (
export TESTVARIABLE)。
- 获取第二个脚本,即
. test2.sh,它将在同一个 shell 中运行。这可以让您轻松共享更复杂的变量,如数组,但也意味着其他脚本可以修改源 shell 中的变量。
更新:
要使用export 设置环境变量,您可以使用现有变量:
A=10
# ...
export A
这应该适用于bash 和sh。 bash 也允许这样组合:
export A=10
这也适用于 my sh(恰好是 bash,您可以使用 echo $SHELL 来检查)。但我不相信这可以保证在所有sh 中都有效,所以最好安全起见并将它们分开。
您以这种方式导出的任何变量都将在您执行的脚本中可见,例如:
a.sh:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
然后:
$ ./a.sh
The message is: hello
这些都是 shell 脚本的事实也只是偶然的。环境变量可以传递给您执行的任何进程,例如,如果我们使用 python 代替,它可能看起来像:
a.sh:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
采购:
相反,我们可以这样获取:
a.sh:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
然后:
$ ./a.sh
The message is: hello
这或多或少直接“导入”了b.sh 的内容并在相同的shell中执行它。请注意,我们不必导出变量来访问它。这隐式共享您拥有的所有变量,并允许其他脚本在 shell 中添加/删除/修改变量。当然,在这个模型中,你的两个脚本应该是相同的语言(sh 或bash)。举个例子,我们如何来回传递消息:
a.sh:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
然后:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
这在bash 中同样适用。它还可以轻松共享您无法以环境变量表示的更复杂的数据(至少无需您承担一些繁重的工作),例如数组或关联数组。