将所有变量从一个shell脚本传递到另一个shell脚本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

假设我有一个名为test.sh的shell脚本/bash脚本

#!/bin/bash
#

TESTVARIABLE=hellohelloheloo
./test2.sh

test2.sh看起来如下

#!/bin/bash
#

echo ${TESTVARIABLE}
提问于
用户回答回答于

设置环境变量,可以使用现有变量:

A=10
# ...
export A

这两种方法都应该有效。bashshbash还允许这样组合:

export A=10

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

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

用户回答回答于

可以始终在子shell中获取它:

( . ./test2.sh )

所以在你的情况下:

set -a
TESTVARIABLE=hellohelloheloo
# ...
# Here put all the variables that will be marked for export
# and that will be available from within test2 (and all other commands).
# If test2 modifies the variables, the modifications will never be
# seen in the present script!
set +a

./test2.sh

 # Here, even if test2 modifies TESTVARIABLE, you'll still have
 # TESTVARIABLE=hellohelloheloo

注意到规范只指定了set -a变量是标记 for export. That is:

set -a
a=b
set +a
a=c
bash -c 'echo "$a"'

扫码关注云+社区