2014-10-16 44 views
0

因此,除了一個小小的東西外,代碼中的所有東西都可以正常工作。錯誤消息「date:Argument list too long」bash

這一部分:

if [ "$LIMITHOURS" -gt "0" -a "$LIMITHOURS" -lt "24" ]; then 
    x=$(($LIMITHOURS*60*60)) 
fi 
SDATE=$(echo "01/jan/2003:11:00:06 +0100"| sed 's/[/]/ /g' |sed 's/:/ /') 
EDATE=$(date --date "$SDATE - $x seconds" +"%d%m%Y%H%M%S") 

#echo "$SDATE" 
#echo "$EDATE" 


while read LINE; do 
CDATE=$(awk '{print $4}'| sed 's/[[]//' | sed 's/[/]//g' |sed 's/://g') 
DATE=$(date --date "$CDATE" +"%d%m%Y%H%M%S") 

#echo "$CDATE" 
done < "$FILENAME" 

當我嘗試運行該腳本,我得到錯誤信息「日期:參數列表太長 」我知道問題出在while循環,有:

DATE = $(日期--date 「$ CDATE」 + 「%d%M%Y%H%M%S」)

任何人誰知道這方面的任何解決方案?我想要ddmmYYYYHHMMSS中的日期格式,例如。 23102002120022

你可以找到腳本在這裏休息:http://pastebin.com/PMk2QDre

+0

@TomFenech,什麼關係呢? argv + envp大小限制並不完全是特定於版本的問題。 – 2014-10-16 18:10:25

回答

1

此代碼:

while read LINE; do 
CDATE=$(awk '{print $4}'| sed 's/[[]//' | sed 's/[/]//g' |sed 's/://g') 
DATE=$(date --date "$CDATE" +"%d%m%Y%H%M%S") 

#echo "$CDATE" 
done < "$FILENAME" 

將宣讀$FILENAME一行到變量LINE,但隨後awk第一個呼叫正在讀其餘的線路。由此產生的CDATE值可能太大而無法放入單個命令行中,不必介意包含太多日期。你可能想

echo "$LINE" | awk '{print $4}' | ... 

一個更簡單的從LINE剝離不良分子的方法,但是,是

CDATE=${LINE//[\/[:]}