【发布时间】:2017-03-29 16:01:25
【问题描述】:
我正在寻找一种从基本 shell 脚本以序列化方式调用多个 shell 脚本的方法。场景:
一个shell脚本- Base_script.sh ,它将在内部调用:
script_1.sh ,
脚本_2.sh ,
脚本_3.sh,
一旦“script_1.sh”完成,那么只有它应该调用“script_2.sh”等等。
我尝试过的所有方法都是以某种方式一次执行所有脚本。 操作系统:使用 Shell/Bash 的 RHEL
编辑:作为对某些 cmets 的回应,我同意,我可以使用(我已经这样做了):
- script1.sh && script2.sh
- 逐个调用每个脚本(sh script1.sh; sh script2.sh ..so on)
- 甚至尝试使用数组来声明脚本,然后在循环中执行每个脚本
我得到的问题和解决方案:
每个脚本(例如“script_1.sh”)都是一个复杂的脚本。它都在做某种数据库基准测试。 脚本在执行时具有一些在后台运行的函数 (someFunction &)。因此,即使脚本实际上被一个一个地调用,但先前脚本的处理仍在后台继续进行。
必须重新设计整个东西以使“Base_script.sh”本身中的每个模块和功能。
感谢大家的回答。欣赏!!
【问题讨论】:
-
script_1.sh、script2.sh等是否在后台运行?你怎么知道三个脚本同时执行?你的意思是,例如,即使 1 先被调用,script2 在 script1 之前完成?
-
你可以使用
script1.sh && script2.sh,这样第二个脚本才会在前一个脚本成功后执行(退出状态0) -
不要只说“我尝试过的所有方法”——明确显示其中一些方法,并显示您的测试过程(及其结果)。在 shell 中一个接一个地运行命令,没有
&显式背景,自动在开始下一个之前等待每个退出 - 所以我们可能在这里遇到的情况是你的脚本'重新运行是故意构建的背景。 -
顺便说一句,我见过人们错误地做的一件事是尝试在没有足够引用的情况下传递包含
&符号的参数。如果你实际上是在运行./script1.sh http://example.com/foo?bar&baz,那么那就是在后台运行./script1.sh http://example.com/foo?bar,尝试在前台运行一个名为baz的命令,然后继续到脚本中的下一行。 -
但是,为了进行准确诊断,您需要提供一个复制器,让其他人看到您自己报告的问题。
标签: linux bash shell unix scripting