2

我正在尝试在 bash 中下载带有 curl 的 html 文件。喜欢这个网站: http ://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++

当我手动下载它时,它工作正常。但是,当我尝试通过 crontab 运行我的脚本时,输出的 html 文件非常小,只显示“对象已移至此处”。链接断开。这是否与 crontab 命令运行的稀疏环境有关?我发现了这个问题:

php ssl curl:对象移动错误

但我使用的是 bash,而不是 php。设置哪些等效的命令行选项或变量来解决 bash 中的这个问题?

(我想用 curl 做这个,而不是 wget)

编辑:嗯,有时手动下载文件(通过交互式外壳)可以工作,但有时不能(我仍然收到“对象已移至此处”消息)。因此,这可能不是 cron 环境的具体问题,而是 curl 本身的问题。

cron 条目:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1

测试.sh:

#! /bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/sbin
cd ~/.class

course="physics 1b"
url="http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S<URL>subareasel=PHYSICS<URL>idxcrs=0001B+++"

curl "$url" -sLo "$course".html  --max-redirs 5

编辑:问题解决了。问题是网址中的杂散标签。这是因为我正在sed s,"<URL>",\""$url"\", template.txt > test.sh生成脚本并且 sed 用&正则表达式替换了所有实例<URL>。修复 url 后, curl 工作正常。

4

2 回答 2

2

您需要-Lor--location选项,它遵循 300 系列重定向。--maxredirs [n]将 curl 限制为n重定向。

奇怪的是,这可以从交互式外壳中工作。您是否获取相同的网址?您总是可以尝试在您的 cron 条目中获取您的环境脚本:

* * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...

编辑:示例网址与脚本中的网址有所不同。$url在脚本中有一对额外的<URL>标签。将它们替换为请求&的常规参数分隔符对我有用。GET

于 2010-03-31T19:04:32.273 回答
0

如果没有看到您的脚本,很难猜测到底发生了什么,但您推测这很可能是环境问题。

通常有帮助的一件事是在脚本中指定可执行文件和文件的完整路径。

如果您显示您的脚本和 crontab 条目,我们可以提供更多帮助。

于 2010-03-31T22:10:44.050 回答