nohup을 사용하여 스크립트를 실행할 때 오류가 발생했습니다.

nohup을 사용하여 스크립트를 실행할 때 오류가 발생했습니다.

nohup sh를 사용하여 스크립트를 실행할 때 다음 오류가 발생합니다.

 syntax error near unexpected token `('

내 스크립트는 다음과 같습니다.

#!/bin/bash
report_log="report.log";
grep -A 3 'successful\|ERROR COUNT EXCEEDED' *.log  > ${report_log};
echo ${report_log};
MAX_ERR_COUNT_EXCEED_MSG="No Max Count Error.";
if grep "ERROR COUNT EXCEEDED" ${report_log}; then
   MAX_ERR_COUNT_EXCEED_MSG="MAX ERROR COUNT EXCEEDED, CHECK RECORD COUNT!";
fi
RESULT_MSG="Execution successful";
if grep '\([1-9]\d*\b\)' ${report_log} | grep 'data errors'; then
   RESULT_MSG="Execution with ERROR";
fi
cat ${report_log} <(echo "-----------") <(echo "${MAX_ERR_COUNT_EXCEED_MSG}") <(echo "${RESULT_MSG}") | mailx -s "Test Result" [email protected]

일부 로그 파일을 필터링하고 해당 파일의 실행 상태에 대한 보고서 이메일을 생성하는 스크립트입니다.

오류는 <(스크립트의 사용법에서 발생한 것 같지만 bash shebang을 추가하면 제대로 작동할 것 같습니다. 다음과 같이 실행하면 스크립트가 문제 없이 실행됩니다.

. ./script.sh

도움이나 조언을 주시면 감사하겠습니다. 감사해요.

답변1

문제는 스크립트를 실행하면 nohup sh /path/to/your/script.shshebang 인터프리터를 덮어쓴다는 것입니다. as sh가 호출되면 bash일부 기능이 꺼지므로(다른 쉘과 유사할 수 있음) 프로세스 대체를 더 이상 해결할 수 없습니다.

해결책은 bash무제한으로 실행되도록 하는 것입니다. 환경 변수를 확인하고 bash(대신 )을 사용하여 sh스크립트를 다시 호출 하면 됩니다 .

#! /bin/bash

if [ "YES" = "$RUNNING_AS_BASH" ]; then
        eval 'cat <(echo "-----------")'
else
        test -f "$0" || exit 1
        RUNNING_AS_BASH="YES" exec bash "$0"
fi

불행히도 전체 구조를 구문 분석 bash합니다 . 따라서 오류를 방지하려면 호환되지 않는 구문을 eval 문에서 숨겨야 합니다.shif

evalif스크립트의 나머지 부분은 구문 분석되지 않으므로 구조에서 작업을 수행하면 이를 피할 수 있습니다.

#! /bin/bash

if [ "YES" != "$RUNNING_AS_BASH" ]; then
        test -f "$0" || exit 1
        RUNNING_AS_BASH="YES" exec bash "$0"
fi

cat <(echo "-----------")

관련 정보