命令在shell脚本中不起作用它作为命令工作

时间:2014-10-13 11:27:16

标签: linux bash shell

当我执行命令时,我能够得到结果。 但是我无法在shell脚本中执行命令,该脚本在从shell脚本运行时会出现错误,因为没有这样的文件或目录。

命令:

cat /usr/local/apache/logs/access_??-2014-10-{11,12}.log | tail

Shell脚本:

REPORT_DATE=`date --date=yesterday +%Y-%m-%d`
ACCESS_LOG_REPORT_DATE=`date --date="$REPORT_DATE" +%d/%b/%Y`

DATE_YEAR=`date --date="$REPORT_DATE" +%Y`
DATE_MONTH=`date --date="$REPORT_DATE" +%m`
DATE_DAY=`date --date="$REPORT_DATE" +%d`
DAYSTOSUBTRACT="-1 day"
DATE_DAY_SUBSTRACTED=`date --date="$REPORT_DATE$DAYSTOSUBTRACT" +%d`

WEB_SERVER_ACCESS_LOGS_PATH="/usr/local/apache/logs/"

WEB_SERVER_ACCESS_LOG_EXT="access_??-$DATE_YEAR-$DATE_MONTH-{$DATE_DAY_SUBSTRACTED,$DATE_DAY}.log"

WEB_SERVER_ACCESS_LOG_FILENAME=$WEB_SERVER_ACCESS_LOGS_PATH$WEB_SERVER_ACCESS_LOG_EXT

READFROM=`cat $WEB_SERVER_ACCESS_LOG_FILENAME | tail`

当我执行shell脚本时,它会抛出错误

cat: /usr/local/apache/logs/access_??-2014-10-{11,12}.log: No such file or directory

2 个答案:

答案 0 :(得分:2)

您不能在引号内使用像*?这样的glob模式字符。壳牌仅在外线报价时才会扩展。所以你可以使用:

READFROM=$(cat access_??-"$DATE_YEAR-$DATE_MONTH-{$DATE_DAY_SUBSTRACTED,$DATE_DAY}.log" | tail)

答案 1 :(得分:0)

或者您可以更新如下:

WEB_SERVER_ACCESS_LOG_FILENAME=`eval echo $WEB_SERVER_ACCESS_LOGS_PATH${WEB_SERVER_ACCESS_LOG_EXT}`