【问题标题】:Wait till command is completely finished in Bash等到命令在 Bash 中完全完成
【发布时间】:2016-06-24 20:31:41
【问题描述】:

我正在使用一个名为 Boxfuse 的实用程序,convert 命令执行一些需要一些时间的处理,并且在此处理过程中有几行输出。

我正在尝试将最后一个输出中的最后一个单词保存到一个变量中。这大约有一半的时间有效。另一半实际上保存了较早输出行之一的最后一个单词。我的 bash 看起来像这样:

BFCONVERT=$(boxfuse convert MyApp:1.3.5)
AMI=${BFCONVERT##* }
echo $AMI

这个命令的完整输出,跨越几行,超过一分钟左右:

Boxfuse client v.1.19.12.1000 Copyright 2016 Boxfuse GmbH. All rights reserved. Account: myname (First Last) 
Waiting for AWS to create an AMI for myname/MyApp:1.3.5 in aws-region-1 (this may take up to 50 seconds) ... 
AMI created in 02:51.972s in aws-region-1 -> ami-12345678

有时我的脚本会回显第一行或第二行的最后一个词,而不是最后一个词。如何强制它等到命令完成?

【问题讨论】:

  • 听起来好像boxfuse 要么将它的一些输出写入标准错误,要么在它派生一个实际产生输出的子进程后退出。
  • 上述场景中的两个都没有。
  • @AxelFontaine 命令是否有可能有时不返回最后两行?似乎在我运行它的大约一半时间里,我将我的姓氏(从第一行开始)作为最后一个单词,没有额外的输出。
  • @AxelFontaine 奇怪的部分是,如果我将此命令置于休眠状态的循环中,它要么在第一次尝试时成功,要么每次迭代都失败。
  • @RhodesianHunter Rerunning 曾经是个小问题。我们今天推出了一个新版本,现在可以输出一条包含 AMI ID 的消息。

标签: bash cloudcaptain


【解决方案1】:

如果可行,试试这个。

lastline=`echo $BFCONVERT | tail -1`
AMI=${lastline##* }
echo $AMI

【讨论】:

  • 这似乎没有奏效,因为我仍然偶尔会得到类似“Last)”的结果
  • 在你的程序运行之后然后在上面放置睡眠命令怎么样。睡 1m;
  • 这似乎也没有解决问题,也没有循环直到返回成功的响应。
猜你喜欢
  • 2021-06-09
  • 1970-01-01
  • 2011-02-19
  • 2011-10-20
  • 1970-01-01
  • 2012-07-19
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多