Lynx正在停止循环?

时间:2013-10-16 20:07:26

标签: bash loops lynx

我会事先道歉;这是我的第一篇文章,所以如果我不够具体,如果问题已经得到解答,我只是看起来不够用,如果我使用某种不正确的格式,我很抱歉。

也就是说,这是我的问题:在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”的文件,其中包含由返回值分隔的网址。此外,我使用所有那些“echo”来进行我自己的调试,但我已经尝试了有和没有回声的。当我执行脚本时,回声都显示出来......

感谢任何帮助,非常感谢你们!希望我没有违反这个帖子的任何规则!

PS:我在Linux Mint上通过“终端”程序运行。我在Gedit中使用bash编写脚本,如果有任何相关信息的话。谢谢!

编辑:实际上,回声测试重复所有三行。所以lynx似乎无法在同一个循环中重新开始?

以下是脚本的简化版本,如下所示:

!#/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 个答案:

答案 0 :(得分:2)

Lynx不能用于脚本,因为它会锁定终端。 Lynx是一个交互式控制台浏览器。

如果要访问脚本中的URL,请使用wget,例如:

wget http://www.google.com/

有关退出代码,请参阅:http://www.gnu.org/software/wget/manual/html_node/Exit-Status.html

解析html-content使用:

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

答案 1 :(得分:1)

我找到了一种方法可以满足你在循环中运行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" 

答案 2 :(得分:0)

很久以前我应该回答这个问题。我让程序正常运行,it's now on 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