如何向 shell 发送许多命令并等待命令结束

如何向 shell 发送许多命令并等待命令结束

我有大约 20 个命令,我必须将所有这些命令发送到 Unix shell 并复制结果,但我不知道该怎么做。

我不确定我有什么外壳,因为它是一个连接到移动网络管理的小程序,通过这个小程序,我们可以通过行发送命令并通过尖叫接收结果,因此我不能使用脚本发送命令。

命令1- 连接服务器。

等待命令 1 完成

命令2- 更新服务器1的所有信息完成

等待。

命令3。获取一些参数。

...以及更多这样的命令。

尝试过cmd1 | cmd2 | cmd3 cmd1 & cmd2 & cmd3cmd1;cmd2

问题在于cmd1它连接到 RNC(网络元素)并需要大约 15 秒的时间,之后cmd2才有意义。但只适用于第一个命令。有什么线索吗,如何运行它?

答案1

通常只是cmd1;cmd2;cmd3;cmd4(如果您想将其写在一行上),或者cmd1 && cmd2 && cmd3 && cmd4如果您不想在 cmd2 失败时运行 cmd3,则使用。

或者,;您可以每行只写一个命令。

cmd1
cmd2
cmd3
cmd4

如果您希望命令在后台并行运行,您还可以使用

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

这些方法中的任何一个都可以放入 shell 脚本中。在 shell 脚本中编写的内容与在实际 shell 本身中编写的内容几乎没有什么区别。

答案2

sleep如果您的环境允许,您可能需要研究一下。完整的序列将类似于cmd1 && sleep 10s && cmd2
这是相关的sleep 的手册页

答案3

只需使用一个脚本,一个包含依次运行的命令的文件,例如:

#!/bin/sh

command-01
command-02
...
command-20

第一行 (shebang) 告诉使用 运行以下命令/bin/sh,使文件可执行 ( chmod u+x your-little-script) 然后您可以通过 运行它./my-little-script。这样你就不会遗漏任何一步;-)

阅读shell的手册,它提供了完整的编程语言。检查bash(1)这是否是可用的,否则是 Korn shell ksh(1)。它们提供了许多有用的功能来控制脚本中的控制流(或交互地)。

答案4

expect您可以在本地计算机上运行类似的命令来发送cmd1并等待其完成,然后再发出cmd2等。您必须计算出合理的等待时间,或者指示命令已完成的特定输出,以便编写正确的命令期待剧本。

当然,cmd1; cmd2; cmd3; cmd4在一个命令中会按顺序执行命令,一个接一个。

相关内容