【问题标题】:how to let the next bash loop wait until the program inside the loop is done?如何让下一个 bash 循环等到循环内的程序完成?
【发布时间】:2013-01-26 00:06:04
【问题描述】:

我意识到 bash 脚本中的以下循环会将 ./a.out 发送到后台,并且运行将在单个 ./a.out 运行完成之前返回系统。

#!/bin/bash
for i in 1,2,3
do
    echo $i
    ./a.out 
done

问题是如何让下一个 bash 循环等到“./a.out”完成?

顺便说一句,我认为这应该是一个常见问题但没有找到类似的问题,或者我可能需要更多的搜索技巧......

【问题讨论】:

  • 回复:“bash 脚本中的以下循环会将 './a.out' 发送到后台”:这不是真的。是什么让你认为它是? (另外,您可能打算写 for i in 1 2 3 而不是 for i in 1,2,3。)

标签: bash


【解决方案1】:

您所描述的是默认行为。您可能会因为您的循环仅使用i="1,2,3" 运行一次而感到困惑,因此似乎一次打印所有内容然后立即退出。

试试for i in 1 2 3,看看你是否得到了你期望的输出。

【讨论】:

  • 成功了!你能详细解释一下“for i in 1,2,3”和“for i in 1 2 3”之间的区别吗?
  • 语法为for i in tokens... 标记用空格分隔,不是逗号或其他任何东西。
  • 我明白了,“1,2,3”是“for i in 1,2,3”中的单个对象。
  • @HailiangZhang:如果你习惯于“普通”的编程语言,可能会让你对 shell 脚本感到困惑的一件事是,空格不仅仅是你为了让代码更容易而放入的东西读书;它们是 shell 语法中的主要分隔符。我在这里看到很多问题来自人们弄错脚本,要么是因为他们遗漏了必需的空格,要么是在被禁止的地方添加了它们。在 shell 中,空格 matter.
【解决方案2】:

您可能会发现“C 风格” for 循环更容易,即: 对于 ((i = 1 ; i

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2020-11-10
    相关资源
    最近更新 更多