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]
一部のログファイルをフィルタリングし、そのファイルの実行状況に関するレポートEメールを生成するスクリプト。
エラーは<(
スクリプトの使用法で発生したようですが、bash shebangを追加すると正常に動作するようです。次のように実行すると、スクリプトは問題なく実行されます。
. ./script.sh
助けやアドバイスをいただきありがとうございます。ありがとうございます。
答え1
問題は、スクリプトを実行するとnohup sh /path/to/your/script.sh
shebangインタプリタを上書きすることです。 assh
が呼び出されると、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ステートメントから非表示にする必要があります。sh
if
eval
if
スクリプトの残りの部分は解析されないため、構造内で作業を実行するとこれを回避できます。
#! /bin/bash
if [ "YES" != "$RUNNING_AS_BASH" ]; then
test -f "$0" || exit 1
RUNNING_AS_BASH="YES" exec bash "$0"
fi
cat <(echo "-----------")