提问人:OfusJK 提问时间:12/16/2022 更新时间:12/16/2022 访问量:193
如何强制 script.sh 作为子壳而不是子壳运行?
How to force script.sh to run as subshell not child?
问:
我有几种 buildA.sh,buildB.sh,......编译一些代码的脚本。 我还有一个通用脚本 common.sh,用于预处理、设置环境和设置陷阱命令。
cat common.sh
~~~
./buildA.sh #call build.sh, other build.sh run in other directory.
~~~
我需要从 common.sh build.sh 作为子 shell 运行,以重用陷阱命令和对 common.sh 的非导出变量访问 有什么方法可以做到这一点或解决方法吗?
答:
2赞
redseven
12/16/2022
#1
您必须使用脚本才能在当前 shell 中运行它。这不是一个子外壳,但我认为这就是你真正想要的:source
source build.sh
或等效的简单语法:
. build.sh
评论
0赞
OfusJK
12/16/2022
我认为使用源代码是最可接受的选择。我以为还有别的办法。来源就足够了。谢谢redseven和Philippe。
0赞
OfusJK
12/17/2022
如果我使用“source”,$LINE 和 $BASH_SOURCE 总是返回那行“source build.sh”而不是实际内容。<代码>----陷阱“exitcode=$?LINE=$LINENO echo “[ERROR]: $BASH_SOURCE: $LINE: $BASH_COMMAND: exit $exitcode” exit $exitcode 'ERR EXIT ... -----</code>
评论
. ./buildA.sh