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

发布于 2022-07-28 23:16:19

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

#!/bin/bash

TESTVARIABLE=hellohelloheloo
./test2.sh

我的test2.sh样子是这样的:

#!/bin/bash

echo ${TESTVARIABLE}

这不起作用。我不想将所有变量作为参数传递,因为恕我直言,这太过分了。

有不同的方法吗?

关注者
0
被浏览
18
1 个回答
  • 面试哥
    面试哥 2022-07-28
    为面试而生,有面试问题,就找面试哥。

    你基本上有两个选择:

    1. export TESTVARIABLE在执行第二个脚本之前将变量设为环境变量 ( )。
    2. 获取第二个脚本,即. test2.sh它将在同一个 shell 中运行。这将使您可以轻松地共享更复杂的变量,例如数组,但也意味着其他脚本可以修改源 shell 中的变量。

    更新:

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

    A=10
    # ...
    export A
    

    这应该适用于bashshbash还允许它像这样组合:

    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
    

    这或多或少直接“导入” 的内容并在 同一个
    shell
    b.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. 它还可以轻松共享您无法表示为环境变量的更复杂的数据(至少您无需承担一些繁重的工作),例如数组或关联数组。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看