Рысь останавливает петлю?
Я просто извинюсь заранее; это мой первый пост, так что извините, если я не достаточно конкретен, если на вопрос уже дан ответ, и я просто не выгляжу достаточно усердно, и если я использую какое-то неправильное форматирование.
Тем не менее, вот моя проблема: в 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"