错误消息“日期:参数列表太长”bash

时间:2014-10-16 16:50:13

标签: 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"

当我尝试运行脚本时,收到错误消息“date:Argument list too too “我知道问题出在while循环中,有:

  

DATE = $(日期 - 日期“$ CDATE”+“%d%m%Y%H%M%S”)

任何知道任何解决方案的人?我希望日期格式为ddmmYYYYHHMMSS,例如。 23102002120022

您可以在此处找到其余的脚本:http://pastebin.com/PMk2QDre

1 个答案:

答案 0 :(得分: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//[\/[:]}