状況は次のとおりです。
私はシェルスクリプトを持っています--script.ksh
私はそれをJavaプログラムから呼び出しており、Javaプログラムのスクリプトからのstdoutが必要です。
また、出力をファイルにリダイレクトする必要があります。スクリプトがいずれかの時点で失敗した場合は、ファイルが添付されたメールを送信する必要があります。
したがって、メーラーがファイルを送信できるように、スクリプトが終了する前にファイルを閉じる必要があります。
私はすべてが正しく機能しています。
1つを除いて、スクリプトに「cd」ステートメントがある場合、スクリプトが終了する前にファイルが閉じられることはありません。ここで私を助けてください
なぜこれが起こっているのかわからない。
これがコードの簡略化されたバージョンです。
#!/bin/ksh
#Need to redirect output to file and stdout
exec 6>&1 #save stdout in [6]
exec 1>shell.log 2>&1 #redirect stderr and stdout to file
#if any error happens reset stdout and print the log contents
trap '
echo "Error Trap";
exec 1>&- 1>&6 6>&-;
echo | cat shell.log>&1;
echo "send the log file by mail";
exit 1' ERR
#cd / #Uncomment and the script behaves differently
echo "some task"
./somescript.ksh #this requires me to cd to its directory and then execute
trap - ERR #End the ERR trap
#in case of normal exit print the log contents
trap '
echo "Normal Exit"
exec 1>&- 1>&6 6>&-;
echo | cat shell.log>&1;
exit 1' EXIT