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]

一部のログファイルをフィルタリングし、そのファイルの実行状況に関するレポートEメールを生成するスクリプト。

エラーは<(スクリプトの使用法で発生したようですが、bash shebangを追加すると正常に動作するようです。次のように実行すると、スクリプトは問題なく実行されます。

. ./script.sh

助けやアドバイスをいただきありがとうございます。ありがとうございます。

ベストアンサー1

問題は、スクリプトを実行するとnohup sh /path/to/your/script.shshebangインタプリタを上書きすることです。 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ステートメントから非表示にする必要があります。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 "-----------")

おすすめ記事