【问题标题】:Bash shell script isn't looping correctlyBash shell 脚本没有正确循环
【发布时间】:2019-10-03 07:56:03
【问题描述】:

我已经写了一段时间...做..循环;但是,该脚本似乎只循环通过其中一个函数。

我有一个 .txt 文件,其中包含一个物种列表(每个物种名称在一个新行上)。我尝试编写一个循环,逐行读取文本文件,回显物种名称,使用 ddgr 执行网络搜索,然后等待 30 秒,然后再用下一行重复该操作。

#!/bin/bash

file="species-list.txt"
while IFS= read -r line
do
   echo "$line";
   ddgr --json "$line" >>ddgr-output.json;
   sleep 30;
done<"$file"

脚本将回显列表中的第一个物种名称,然后对每个物种名称执行 ddgr 函数,而无需休眠或重复回显。

【问题讨论】:

  • 你的暗示应该是不可能的。您可以通过完全回显 ddgr 命令来测试它。
  • 我更改了脚本,只将 ddgr 输出写入终端,我可以看到它正在处理所有物种,没有暂停。
  • 你可以试试ddgr --json "$line" &lt;/dev/null &gt;&gt;ddgr-output.json; 吗?还是exec 10&lt;"$file"; while IFS= read -u10 -r line?可能是this
  • @KamilCuk /null 工作!非常感谢:)

标签: bash loops


【解决方案1】:

在您的脚本中,ddgr 进程获得与整个while read 循环相同的标准输入。然后ddgr 进程从标准输入读取所有内容,并通过&lt;species-list.txt 文件。

你可以:

  • 使用exec 1&lt;"$file"打开另一个特定于read命令的文件描述符,然后告诉read从第10个文件描述符while IFS= read -u10 -r line读取

  • 或者你可以将标准输入从其他地方重定向到ddgr 命令,可能是/dev/null,所以它不会吃来自species-list.txt 的任何东西,例如。 ddgr .. &lt;/dev/null &gt;&gt;ddgr-output.json.

您的脚本也可以使用xargs:

< species-list.txt xargs -d'\n' -n1 ddgr --json >> ddgr-output.json`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2017-11-13
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多