Рысь останавливает петлю?

Я просто извинюсь заранее; это мой первый пост, так что извините, если я не достаточно конкретен, если на вопрос уже дан ответ, и я просто не выгляжу достаточно усердно, и если я использую какое-то неправильное форматирование.

Тем не менее, вот моя проблема: в bash я пытаюсь создать скрипт, который будет читать файл со списком нескольких десятков URL. После того, как он прочитает каждую строку, мне нужно, чтобы он выполнил ряд действий над этим, во-первых, чтобы использовать lynx для перехода на веб-сайт. Тем не менее, на практике, он будет работать один раз идеально на первой линии. Lynx идет, загрузка работает, а затем происходит последующее переименование и организация этого файла. Но затем он пропускает все остальные строки и действует так, как будто закончил весь файл.

Я проверил, была ли проблема вызвана lynx, удалив все остальные части кода, а затем просто удалив lynx. Он работает без Lynx, но, конечно, мне нужен lynx, чтобы остальная часть вывода была мне полезна. Позвольте мне просто опубликовать код:

!#/bin/bash

while read line; do
echo $line
  lynx -accept_all_cookies  $line
echo "lynx done"
  od -N 2 -h *.zip | grep "4b50"
echo "od done, if 1 starting..."
    if [[ $? -eq 0 ]]
    then ls *.*>>logs/zips.log
    else
    od -N 2 -h *.exe | grep "5a4d"
echo "if 2 starting..."     
      if [[ $? -eq 0 ]]
      then ls *.*>>logs/exes.log
      else
      od -N 2 -h *.exe | grep "5a4d, 4b50"
echo "if 3 starting..."
        if [[ $? -eq 1 ]]
        then
        ls *.*>>logs/failed.log
        fi
echo "if 3 done"
      fi
echo "if 2 done"
    fi
echo "if 1 done..."
  FILE=`(ls -tr *.* | head -1)`
  NOW=$(date +"%m_%d_%Y")
echo "vars set"
  mv $FILE "criticalfreepri/${FILE%%.*}(ZCH,$NOW).${FILE#*.}" -u
echo "file moved"
  rm *.zip *.exe
echo "file removed"
done < "lynx"

$SHELL

Просто чтобы быть уверенным, у меня есть файл с именем "lynx", который содержит URL-адреса, разделенные возвращаемым каждым. Кроме того, я использовал все эти "эхо" для выполнения своего рода отладки, но я пробовал это делать с эхом и без него. Когда я выполняю сценарий, эхо все появляется...

Любая помощь приветствуется, и спасибо всем большое! Надеюсь, я не нарушил никаких правил в этом посте!

PS: я на Linux Mint запускаю вещи через "терминальную" программу. Я пишу сценарий с Bash в Gedit, если какая-либо из этой информации имеет отношение. Спасибо!

РЕДАКТИРОВАТЬ: На самом деле, тесты эха повторяются для всех трех строк. Таким образом, кажется, что рысь просто не может начать снова в том же цикле?

Вот упрощенная версия скрипта, как и было запрошено:

!#/bin/bash

while read -r line; do
echo $line
lynx $line
echo "lynx done"
done < "ref/url" 
read "lynx"

$SHELL

Обратите внимание, что я изменил сайты, на которые идет файл "url":

`www.google.com

www.majorgeeks.com

http://www.sophos.com/en-us/products/free-tools/virus-removal-tool.aspx`

3 ответа

Решение

Я должен был ответить на этот вопрос давным-давно. У меня работает программа, теперь она на Github!

В любом случае, я просто должен был обернуть цикл внутри функции. Что-то вроде этого:

progdownload () {
  printlog "attmpting download from ${URL}"
  if echo "${URL}" | grep -q "http://www.majorgeeks.com/" ; then
lynx -cmd_script="${WORKINGDIR}/support/mgcmd.txt" --accept-all-cookies ${URL}
  else wget ${URL}
  fi
  }
URL="something.com"
progdownload

Lynx не предназначен для использования в скриптах, потому что он блокирует терминал. Lynx - это браузер с интерактивной консолью.

Если вы хотите получить доступ к URL в сценарии, используйте wget, например:

wget http://www.google.com/

Для кодов выхода смотрите: http://www.gnu.org/software/wget/manual/html_node/Exit-Status.html

для разбора html-контента используйте:

VAR=`wget -qO- http://www.google.com/`
echo $VAR

Я нашел способ, который может удовлетворить ваше требование запустить команду lynx в цикле с заменой другой ссылки URL.

использование

echo `lynx $line` 

(Выведите строку lynx $ в одинарные кавычки (')) вместо lynx $line, Вы можете сослаться ниже:

ваш код

!#/bin/bash

while read -r line; do
echo $line
lynx $line
echo "lynx done"
done < "ref/url" 
read "lynx"

$SHELL

попробуйте ниже

!#/bin/bash
while read -r line; do
echo $line
echo `lynx $line`
echo "lynx done"
done < "ref/url" 
Другие вопросы по тегам