bash脚本覆盖执行的第二个脚本中的硬编码变量

时间:2018-06-15 19:35:27

标签: bash

我正在呼叫If IsNull(Me!tbx_outTSDatum_BQC.Value) Then Me!tbx_outTSDatum_BQC.Value = Me!tbx_inTSDatum_BQC.Value End If 。我试图在我调用的第二个bash脚本中操作具有硬编码值的变量。我无法控制脚本,并且正在构建一个包装器,以便在它最终启动Uncle构建之前调整一些构建行为。我不确定在阅读和尝试大量例子之后还有什么可尝试的。

情况的例子:

build.sh调用build2.sh

yocto

build2.sh

IS_DEV=1 ./build2.sh #trying to override value

我在调用IS_DEV=0 # hardcoded value echo $IS_DEV # always results in 0. 之前尝试过export IS_DEV=1

我确定这很简单,但我似乎无法让它发挥作用。我感谢任何帮助。这可能吗?我在build2.sh上使用GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

哦,我也尝试过没有运气的采购技术。

Ubuntu 16.04.4 LTS

我在哪里弄错了?

非常感谢。

1 个答案:

答案 0 :(得分:4)

如果您无法修改脚本,请执行它的修改版本。

sed 's/^IS_DEV=0 /IS_DEV=1 /' build2.sh | sh

显然,如果你需要Bash语义而不是POSIX bash语义,请管道到sh

如果脚本真的硬编码一个值而无法从命令行覆盖它,那么修改该脚本是唯一可行的解​​决方法。但修改可能是短暂的;上面对脚本执行简单替换,然后通过管道将修改后的临时副本传递给新的shell实例以供执行。修改仅存在于管道中,不会影响build2.sh的磁盘版本。