【问题标题】:bash Execute command after another one finishesbash 在另一个完成后执行命令
【发布时间】:2020-10-28 22:48:00
【问题描述】:

我有一个文件列表和一个名为app 的小程序。 我的名单是file01.txtfile1000.txt。 我想创建一个一个一个运行的 bash 脚本:

app -i list01.txt     # to the file1000.txt

当上一个命令完成时,我想一个一个地执行命令。在我的示例中,我的做法是否正确?

#!/bin/bash
app -i list01.txt;
app -i list02.txt;
app -i list03.txt;

【问题讨论】:

  • 是的,应该可以工作 - 假设 app 同步运行并且不会自行守护进程。虽然如果您有很多文件或希望它是动态的,那么最好使用循环并动态生成文件名。
  • 也许你可以对所有带有for f in list*.txt; do app -i "$f"; done之类的文件循环执行此操作。
  • 所以,只有一位数字会被额外的零填充?
  • 输出怎么样我想知道输出是否是同一个文件我可以使用 $RANDOM 像 for f in list*.txt;做应用程序 -i "$f -o $RANDOM.csv";完成
  • 也许是xargs的工作?

标签: linux bash shell loops


【解决方案1】:

您可以使用seq 生成所有命令:

seq -f 'echo app -i file%02.0f.txt' 1 1000 | sh

如果输出看起来正确,请删除echo

【讨论】:

    【解决方案2】:

    如果您的应用在标准前台 CLI(终端)模式下运行,那么您是对的。这样,一切都从上到下一个接一个地运行。

    仅在app1 之后运行app2 的另一种方式如下:

    app1 && app2
    

    【讨论】:

    • 谢谢,是的,我使用 makefile build-linux 将我的代码编译到二进制文件中:GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bin/app.linux-amd64 *。去
    • 是的。那你是对的,你写的东西会从上到下,没有惊喜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多