【问题标题】:HTML to text conversion in shell scriptshell脚本中的HTML到文本转换
【发布时间】:2009-05-23 15:11:35
【问题描述】:

我编写了一个 shell 脚本,使用 lynx 将 HTML 源代码转换为纯文本。

这里是:

#!/bin/sh

if [ -f = "/usr/bin/lynx" ]
  then
    if [ -f = "$1" ]
      then
        lynx -dump $1 > $2
      else
        echo "File $1 does not exist!"
    fi
  else
    echo "Lynx is not installed!"
fi

现在,虽然 lynx 存在于正确的目录中,并且我传递了正确的参数,但我得到“Lyns 未安装!”消息或(如果我评论第一个测试)“文件 $1 不存在!”。我不擅长 sh 所以有人能告诉我脚本有什么问题吗?

【问题讨论】:

    标签: html shell lynx


    【解决方案1】:

    我认为第一个if是错误的,应该用

    代替
    if [ -f /usr/bin/lynx ]
    

    【讨论】:

    • 我认为第二个也是如此。
    【解决方案2】:

    尝试删除“-f =”并保留它只是“-f”

    【讨论】:

      【解决方案3】:

      现在是这样的:

      #!/bin/sh
      
      if [ -f /usr/bin/lynx ]
        then
          if [ -f $1 ]
            then
              lynx -dump $1 > $2
            else
              echo "File $1 does not exist!"
          fi
        else
          echo "Lynx is not installed!"
      fi
      

      测试的问题已经消失,但现在我得到了这个错误:

      第 7 行:$2:不明确的重定向

      虽然

      lynx -dump site.html > 如果从控制台运行,site.txt 工作正常

      【讨论】:

      • 你没有检查你是否提供了两个文件名 - 所以 $2 是空的,'>' 没有说明重定向输出的位置,所以它是一个模棱两可的重定向。顺便说一句,在我的机器上,lynx 安装在 /usr/gnu/bin 或 /usr/local/bin 中(两者都在我的 PATH 上)。
      • 您可以将其简化为: exec ${LYNX:-lynx} -dump ${1:?} >${2:?};这将非常有效地完成相同的工作(尽管默认错误消息有点粗略)。
      【解决方案4】:
      LINKS=`which links`
      if [ -x $LINKS ]; then
         ...
      else
         ...
      endif
      

      如果它没有安装在 /usr/bin/ 中怎么办?如果由于某种原因它无法执行怎么办?

      【讨论】:

      • 嗯,链接总是比 lynx 好...我更喜欢它 ;-)
      • 是否支持-dump?我不这么认为
      • 实际上那个男人说它确实......而且男人......恕我直言,它看起来比lynx更好......但是......我的回答更多的是关于BASH代码(测试位置命令等)然后是实际的命令。
      猜你喜欢
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 2020-07-03
      • 2014-06-05
      • 2016-04-28
      • 2015-08-27
      相关资源
      最近更新 更多