1

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

也就是说,这是我的问题:在 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 上通过“终端”程序运行东西。如果有任何相关信息,我正在 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 `

4

3 回答 3

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
于 2013-10-17T12:29:53.630 回答
1

我找到了一种方法可以满足您在循环中运行 lynx 命令并替换不同的 url 链接的要求。

利用

echo `lynx $line` 

(在单引号(')中回显 lynx $line)而不是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" 
于 2013-12-11T14:43:40.037 回答
0

我早就应该回答这个问题了。我得到了这个程序,它现在在 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
于 2016-01-12T04:19:03.563 回答