bash – 将所有变量从一个shellscript传递到另一个?

所以让我说我有一个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中同样好用。它还使您可以轻松地共享更多复杂的数据,这些数据不能表达为环境变量(至少没有您的部分),例如数组或关联数组。

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...