2014-06-09 37 views
1

手動筆者從終端上運行腳本是這樣的:的Perl:如何讓日期作爲參數傳遞給Perl腳本

# perl renew.pl 2014-06-09 data.xml 

,其中2014年6月9日是今天的日期和data.xml中的文件,腳本更新。

我想用cron運行這個腳本,所以我需要自動插入當前日期。 我已經試過類似

# perl renew.pl date +"%Y/%m/%d" data.xml <br> 
or <br> 
# perl renew.pl 'date +"%Y/%m/%d"' data.xml<br> 
or <br> 
# TODAY=`date '+%Y%m%d'`; perl renew.pl TODAY data.xml 

但總是得到響應,如:在/usr/lib/perl5/site_perl/5.8.8/在數字GE

使用未初始化值(> =)日期/計算器/ PP.pm線1547,線 523日期::計算器:: PP :: Add_Delta_Days():日期::計算器:: Add_Delta_Days():不renew.pl有效日期

是否有任何其他變體插入日期作爲參數?

+0

爲什麼不使用內置函數而不是通過命令行傳遞 –

+0

您在命令行示例中使用了不同的日期分隔符。如果不能訪問代碼,很難判斷這是否意義重大。 – tripleee

回答

2

我不確定shell crond使用什麼。也許這是你的登錄shell?如果使用shbash像它對於我來說,你想

perl renew.pl "`date +"%Y/%m/%d"`" data.xml 

或更具可讀性

perl renew.pl "$(date +"%Y/%m/%d")" data.xml 

`...`又名$(...)執行其中的命令,而插值輸出。周圍的雙引號可以轉義空格,不會讓結果作爲單個參數傳遞。 (正在這裏不需要他們我使用它們出於習慣,防患於未然。)


讓我們來看看你嘗試過什麼:

  • perl renew.pl date +"%Y/%m/%d" data.xml通過date+%Y/%m/%ddata.xml爲參數。

    缺少前面提到的反引號。

  • perl renew.pl 'date +"%Y/%m/%d"' data.xml通過date +"%Y/%m/%d"data.xml作爲aguments。

    缺少前面提到的反引號。

  • TODAY=date '+%Y%m%d'; perl renew.pl TODAY data.xmlTODAYdata.xml作爲參數傳遞。

    您終於使用了反引號,但您並未實際使用存儲結果的變量。您應該使用"$TODAY"而不是TODAY

+0

非常感謝!這就是我需要的! – glukomania

+0

如果這回答您的問題,請檢查答案旁邊的標記。歡迎來到Stack Overflow :) – ikegami

1

可以試試以下兩種中bash的:

export TODAY=$(date +%Y%m%d); perl renew.pl $TODAY data.xml 

或沒有中間變量:

perl renew.pl $(date +%Y%m%d) data.xml 

您也可以編輯你的renew.pl默認爲今天的日期時,只有1名爲參數:

use strict; 
use warnings; 

use Time::Piece; 

unshift @ARGV, localtime->strftime("%Y-%m-%d") if @ARGV == 1; 

然後:

perl renew.pl data.xml 
相關問題