将所有变量从一个 shell 脚本传递到另一个?
假设我有一个名为的 shell / bash 脚本test.sh
:
#!/bin/bash
TESTVARIABLE=hellohelloheloo
./test2.sh
我的test2.sh
样子是这样的:
#!/bin/bash
echo ${TESTVARIABLE}
这不起作用。我不想将所有变量作为参数传递,因为恕我直言,这太过分了。
有不同的方法吗?
-
你基本上有两个选择:
export TESTVARIABLE
在执行第二个脚本之前将变量设为环境变量 ( )。- 获取第二个脚本,即
. test2.sh
它将在同一个 shell 中运行。这将使您可以轻松地共享更复杂的变量,例如数组,但也意味着其他脚本可以修改源 shell 中的变量。
更新:
要使用
export
设置环境变量,您可以使用现有变量:A=10 # ... export A
这应该适用于
bash
和sh
。bash
还允许它像这样组合:export A=10
这也适用于 我的
sh
(恰好是bash
,你可以echo $SHELL
用来检查)。但我不相信这可以保证在所有情况下都有效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 代替,它可能看起来像:
灰:
#!/bin/sh MESSAGE="hello" export MESSAGE ./b.py
b.py:
#!/usr/bin/python import os print 'The message is:', os.environ['MESSAGE']
采购:
相反,我们可以这样获取:
灰:
#!/bin/sh MESSAGE="hello" . ./b.sh
b.sh:
#!/bin/sh echo "The message is: $MESSAGE"
然后:
$ ./a.sh The message is: hello
这或多或少直接“导入” 的内容并在 同一个
shellb.sh
中执行它。请注意,我们不必导出变量来访问它。这隐式共享您拥有的所有变量,并允许其他脚本在 shell
中添加/删除/修改变量。当然,在这个模型中,您的两个脚本应该是相同的语言(或)。举个例子,我们如何来回传递消息: __sh``bash
灰:
#!/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
. 它还可以轻松共享您无法表示为环境变量的更复杂的数据(至少您无需承担一些繁重的工作),例如数组或关联数组。