2010-03-31 102 views
1

我試圖用bash下載一個捲曲的html文件。喜歡本網站: http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++curl:從動態url下載

當我手動下載它時,它工作正常。但是,當我嘗試通過crontab運行我的腳本時,輸出html文件非常小,只是說「對象移到這裏。」與一個斷開的鏈接。這是否與crontab命令運行它的稀疏環境有關?我發現這個問題:

php ssl curl : object moved error

但我使用bash,而不是PHP。什麼是等效的命令行選項或變量來設置解決這個問題在bash中?

(我想,捲曲要做到這一點,而不是wget的)

編輯:嗯,有時候手動下載文件(通過交互shell)的作品,但有時它不會(我仍然得到「合同 - 這裏「消息)。所以它可能不是一個明確的問題與cron的環境,但捲曲本身。

的cron項:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1

test.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工作正常。

回答

2

你想要-L--location選項,這是繼300個系列重定向。 --maxredirs [n]將限制捲曲爲n重定向。

其奇怪的是,這從交互式shell中工作。你是否獲取相同的網址?你總是可以嘗試在你的cron項採購環境腳本:

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

編輯:的例子網址超過了一個腳本有些不同。腳本中的$url有另外一對<URL>標籤。將&替換爲GET請求的傳統參數分隔符,適用於我。

+0

使用-L選項有幫助,但它不能解決它。它沒有「對象移到這裏」消息,但它下載的頁面只有站點的錯誤消息 - 「系統當前不可訪問或脫機」,而不是它想要的頁面。 – anoda9 2010-04-01 00:17:16

+0

是的,我正在使用相同的URL進行測試。 我沒有.bashrc文件,我不知道,如果採購環境的腳本將幫助.. – anoda9 2010-04-01 00:19:30

+0

良好的漁獲物,它是有點不同。我使用sed將URL替換爲腳本,並且我不知道替換字段中「&」字符的行爲。謝謝。 – anoda9 2010-04-01 07:24:35

0

沒有看到你的腳本很難猜測究竟是怎麼回事,但很可能是它,你猜測是一個環境問題。

有一件事經常會有幫助,那就是在腳本中指定可執行文件和文件的完整路徑。

如果您顯示您的腳本和crontab條目,我們可以提供更多幫助。