2014-10-13 5 views
0

명령을 실행할 때 결과를 가져올 수 있습니다. 그러나 쉘 스크립트에서이 명령을 실행할 수 없습니다.이 스크립트는 쉘 스크립트에서 실행할 때 해당 파일이나 디렉토리가 없으므로 오류가 발생합니다.명령이 쉘 스크립트에서 작동하지 않습니다. 명령으로 작동합니다.

명령 :

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

쉘 스크립트 :

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` 

나는 당신은 * 나처럼 글로브 패턴 문자를 사용할 수 없습니다

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

시도는 고양이 AB는'하는 " – Matthias

답변

2

으로 오류를 던지고있다 쉘 스크립트를 실행하고 따옴표 안에 ?. 셸은 따옴표 밖에있을 때만 확장됩니다.

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

참고하지 않고 WEB_SERVER_ACCES_LOG_EXT을 정의 할 수 | tail'는'꼬리 ab'과 동일하지 않습니다 – Rein

+0

그래, 맞아, 지금 편집 했어 – anubhava

+0

glob 패턴을 잘 작동하는 쉘 스크립트의 다른 명령에서 사용했다.이 문제 만있다. –

0

또는 다음과 같이 업데이트 할 수 있습니다 : 그래서 당신은 사용할 수 있습니다

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

[eval 사용은 권장하지 않습니다.] (http://mywiki.wooledge.org/BashFAQ/048). 그렇지 않으면 작업을 수행 할 수 없거나 실제로 입력을 신뢰하지 않는 한. – anishsane

관련 문제