gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:37:52 25 4
gpt4 key购买 nike

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

#!/bin/bash

TESTVARIABLE=hellohelloheloo
./test2.sh

我的 test2.sh 看起来像这样:

#!/bin/bash

echo ${TESTVARIABLE}

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

还有其他方法吗?

最佳答案

你基本上有两个选择:

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

更新:

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

A=10
# ...
export A

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

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 中添加/删除/修改变量。当然,在此模型中,您的两个脚本应该是相同的语言(shbash)。举例说明我们如何来回传递消息:

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 中同样有效。它还可以轻松共享更复杂的数据,您无法将这些数据表示为环境变量(至少您不需要做一些繁重的工作),例如数组或关联数组。

关于bash - 将所有变量从一个 shell 脚本传递到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com