我试图理解一个bash脚本,我应该维护并卡住.命令是这种形式:
. $APP_LOCATION/somescript.sh param1 param2 &
该行不是在循环中调用的,也不是从somescript.sh发送回调用脚本的任何返回代码
我知道“.”将使进程在同一个shell中运行.但是“&”将产生一个不同的过程.
这听起来很矛盾.这里到底发生了什么?有任何想法吗?
解决方法:
该脚本在后台进程中运行,但它是一个子shell,而不是一个单独调用的解释器,因为它没有点.
也就是说 – 当前的解释器分叉然后开始运行命令(获取脚本).因此,它继承了shell变量,而不仅仅是环境变量.
否则,将通过execv()调用调用新脚本的解释器,该调用将用新的解释器替换当前解释器.这通常是正确的,因为它提供了更多的灵活性 – 除了为同一个shell编写的脚本之外,你不能运行任何东西.或者源,毕竟,启动一个新的解释器意味着你的另一个脚本可以用Python,Perl,编译的二进制文件等重写,而不需要调用者进行更改.
(这是为什么要执行脚本的原因的一部分,而不是意图来源的库,不应该有文件扩展名 – 为什么bash库应该是.bash,而不是.sh的一部分,这样不准确的信息没有提供他们可以获得什么样的口译员).
原文地址:https://codeday.me/bug/20190517/1121606.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。