我写了一段时间... 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功能,而无需休眠或重复回显。
答案 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`