Скрипт оболочки Bash работает некорректно - PullRequest
0 голосов
/ 16 мая 2019

Я написал некоторое время ... do .. loop;однако, сценарий, кажется, выполняет только одну из функций.

У меня есть файл .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 Ответ

1 голос
/ 16 мая 2019

В вашем скрипте процесс ddgr получает тот же стандартный ввод, что и весь цикл while read.Затем процесс ddgr читает все из стандартного ввода, начиная с файла <species-list.txt.

Вы можете:

  • открыть другой дескриптор файла, специфичный для readвведите команду while, используя exec 1<"$file", а затем скажите read для чтения из 10-го дескриптора файла 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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...