作为 cron 作业运行时 lynx -dump 的输出不同

作为 cron 作业运行时 lynx -dump 的输出不同

几年来,我一直在使用lynx -dump包含非拉丁字符的网页中的内容进行“抓取”。我将页面内容保存到一个文件中,然后通过 sed 代理对其进行修改,并将其通过电子邮件正文发送——所有这一切都发生在我创建的脚本中。但我发现,在切换发行版(Ubuntu 到 Void)后,我的脚本无法按预期工作。我已经确定了故障点,如下所示。

当我从命令行运行脚本的第一部分(包含内容的部分lynx -dump URL以及要保存内容的文件名)时,一切都按预期工作。该文件显示并包含我期望的非拉丁字符。然而,当我尝试通过规定与 cron 作业相同的命令来自动化该过程时,结果不同。预期的文件确实出现了,但我得到的是使用拉丁字符音译的相同文本,而不是包含预期的非拉丁字符,而不是我想要的。我的脚本中接下来的内容失败了,因为它取决于非拉丁字符的存在。

那么,为什么这些奇怪的结果取决于我是否从命令行发出 lynx 命令而不是在 cron 作业中发出?也许该网站正在进行某种检测并在一种情况下提供音译页面,但在另一种情况下则不提供?或者 lynx 本身正在将非拉丁字符音译为拉丁字符?意见将不胜感激。

答案1

lynx使用当前区域设置来确定可用于显示页面的字符集。但是,此信息可能无法获得cron,因此您需要执行以下操作:

lynx -display_charset=UTF-8 -dump http://example.com/some/page.html

(当然,如果与 UTF-8 不同,请使用您系统上的字符集)。

答案2

lynx 使用您的音译语言环境设置作为提示。在 中运行cron,区域设置很可能是 POSIX。我会先调查一下。

对于 lynx 的配置,从这里开始:

  • 字符集(话题)
  • CHARACTER_SET
  • LOCALE_CHARSET

    LOCALE_CHARSET覆盖CHARACTER_SET如果为 true,则使用当前区域设置查找对应的 MIME 名称,并将其用作显示字符集。

相关内容