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


16

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

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

命令1-与服务器连接。

等待命令1完成

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

等待。

指令3。获取一些参数。

...以及更多此类命令。

试着cmd1 | cmd2 | cmd3 cmd1 & cmd2 & cmd3cmd1;cmd2

问题在于将cmd1其连接到RNC(网络元素)并花费15秒钟,之后cmd2才有意义。但只为第一个cmd工作。任何线索,如何运行?


3
使用脚本?或&&在命令之间。
伯恩哈德

Answers:


20

通常只是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本身中编写的内容几乎没有区别。


MM问题,当我发送cmd1时,它实际上必须在6秒钟左右完成,问题出在它发送cmd2cmd1时,仍然处理失败。
乔纳森·劳尔·塔皮亚·洛佩兹

4
在这种cmd1;cmd2情况下(或cmd1 && cmd2就此而言),cmd2直到cmd1退出(并因此完成)后才会运行。因此应该没有任何问题-请改写您的问题,或提供一个人们可以实际复制的示例。
frostschutz

好的,我要修改问题。谢谢
乔纳森·劳尔·塔皮亚·洛佩兹

2

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


睡眠/等待只有在确定地知道上一个程序(可能会生成后台进程)完成并退出(IE暂停问题)所需的时间,或者如果您确定要中断并在间隔后运行第二个命令时才有用已经过去了,如果两者是异步的,则可能会发生,但是您仍然需要在两者之间留出一些时间。虽然最有可能,但这不是您想要的。实际上,它可能会起作用。但这并不可靠。
贾斯汀·里夫斯

1

只需使用一个脚本,一个包含命令的文件就可以一个接一个地运行,例如:

#!/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)。它们提供了许多有用的功能来控制脚本中的控制流(或交互式地)。


谢谢,但是我不能用脚本。
乔纳森·劳尔·塔皮亚·洛佩兹

为什么?无论如何,除非这是一个非常法西斯主义的环境,否则您应该能够提供脚本的来源:(source your-little-script. your-little-script简称为)。
vonbrand

因为,我还没有直接访问unix系统的权限,就像一个小程序一样,它只允许在行中执行cmd并通过尖叫获得结果,而对于Im,我将与该命令一起使用,但不适合使用脚本。
乔纳森·劳尔·塔皮亚·洛佩兹

好的,这使事情有所澄清...命令的源/目标是什么环境?您使用什么来运送要执行的命令?什么是远程环境?您在那里的设置是什么(您是否有普通帐户,可以通过ssh或访问PuTTY
vonbrand

-1

您可以expect在本地计算机上运行类似的内容cmd1,以在发出cmd2等之前发送并等待它完成。您必须找出一个合理的等待时间,或一个表明命令已完成的特定输出,以便编写正确的命令。期望脚本。

当然,cmd1; cmd2; cmd3; cmd4在一个命令中将依次执行命令,一个接一个地执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.