状況で奇妙な行動を起こしますJavaプログラム。シェルスクリプトの出力をfileとstdoutにリダイレクトしようとしています。私はシェルスクリプトを持って</p> <p>- script.ksh</p> <p>私はJavaプログラムから呼び出すと私は内のスクリプトから標準出力を必要とする:スクリプト内のcdコマンドは、ここで
出力をファイルにリダイレクトする必要があります。また、スクリプトが失敗した場合は、ファイルを添付したメールを送信する必要があります。
メールが送信できるように、スクリプトが終了する前にファイルを閉じる必要があります。
私は右の作業すべてを持っています。
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
ビルドされたコマンドにはJavaから実行すると問題が発生する可能性があります... – OscarRyz
プロンプトまたはjavaから実行すると、私は別の結果を得られません。私がcdコマンドにコメントすると動作が変わります – Sougata