Bash Shell脚本未正确循环

时间:2019-05-16 06:04:16

标签: bash loops

我写了一段时间... do ..循环;但是,该脚本似乎仅循环显示其中一个功能。

我有一个.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功能,而无需休眠或重复回显。

1 个答案:

答案 0 :(得分:1)

在您的脚本中,ddgr进程具有与整个while read循环相同的标准输入。然后ddgr进程读取标准输入,即<species-list.txt文件。

您可以:

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

  • ,或者您可以将标准输入从其他地方(可能为ddgr重定向到/dev/null命令,因此它不会吃掉species-list.txt的任何东西。 ddgr .. </dev/null >>ddgr-output.json

另外,您的脚本可以使用xargs

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