所以让我说我有一个shellscript / bash脚本test.sh
具有:
#!/bin/bash # TESTVARIABLE=hellohelloheloo ./test2.sh
我的test2.sh看起来像这样
#!/bin/bash # echo ${TESTVARIABLE}
这不工作。我不想传递所有的变量作为参数,因为imho这是overkill。有不同的方法吗?
你基本上有两个选择:
>在执行第2个脚本之前,使该变量成为一个环境变量(导出TESTVARIABLE)。
>源第二个脚本,即。 test2.sh并且它将在同一个shell中运行。这将允许您轻松地共享更复杂的变量,如数组,但也意味着其他脚本可以修改源shell中的变量。
更新:
要使用导出设置环境变量,可以使用现有变量:
A=10 # ... export A
这应该在bash和sh中工作。 bash还允许它组合如下:
export A=10
这也可以在我的sh(这恰好是bash,你可以使用echo $ SHELL检查)。但我不相信那保证一切正常工作,所以最好玩安全和分离。
以这种方式导出的任何变量将在您执行的脚本中可见,例如:
灰:
#!/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
这或多或少“直接导入”b.sh的内容,并在同一个shell中执行它。注意,我们不必导出变量来访问它。这隐含地共享所有的变量,以及允许其他脚本在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中同样好用。它还使您可以轻松地共享更多复杂的数据,这些数据不能表达为环境变量(至少没有您的部分),例如数组或关联数组。