Linux 命令在shell脚本中不起作用,它作为命令起作用
当我执行命令时,我可以得到结果。 但我无法在shell脚本中执行该命令,这会导致错误,因为在shell脚本中运行该命令时,没有这样的文件或目录 命令:Linux 命令在shell脚本中不起作用,它作为命令起作用,linux,bash,shell,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
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
不能在引号内使用全局模式字符,如
*
或?
。Shell仅在它们位于quote之外时才会展开。因此,您可以使用:
READFROM=$(cat access_??-"$DATE_YEAR-$DATE_MONTH-{$DATE_DAY_SUBSTRACTED,$DATE_DAY}.log" | tail)
或者,您可以按如下方式更新:
WEB_SERVER_ACCESS_LOG_FILENAME=`eval echo $WEB_SERVER_ACCESS_LOGS_PATH${WEB_SERVER_ACCESS_LOG_EXT}`
尝试在不使用“,除非,否则无法以其他方式完成工作,或者如果您真的信任输入。请注意,
catab | tail
与tail ab
不同,我在shell脚本中的其他命令中使用了glob模式,它们工作正常。我只面临这个问题。无论你在哪里使用它们,只要确保没有引用?
,*
等。你试过我建议的吗?是的,阿努巴瓦。我已经尝试过了,但是我得到了相同的结果。/usr/local/apache/logs/
目录中的确切日志文件名是什么?