2011-02-04 12 views
0

状況で奇妙な行動を起こします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 
+0

ビルドされたコマンドにはJavaから実行すると問題が発生する可能性があります... – OscarRyz

+0

プロンプトまたはjavaから実行すると、私は別の結果を得られません。私がcdコマンドにコメントすると動作が変わります – Sougata

答えて

1

現在のディレクトリにあるファイルを開いてからディレクトリを変更しています。これらのファイルに絶対パスを使用してみてください。

echocatの配管はなぜですか?あなたのスクリプトには何の効果もありません。ちょうどcatファイル。 stdoutをstdoutにリダイレクトする必要はありません。 cat filecat file >&1と同じです。

通常終了のためにexit 1をやっているのはなぜですか?私はexit 0になるはずです。

+0

出口を指摘して猫の誤りをエコーし​​てくれてありがとう。絶対パスを使用して は、作業を行います。しかし、絶対パスを使用することはできません。私はスクリプトから別のスクリプトを呼び出しているので、他のスクリプトは相対パスを使用しています。私は他のスクリプトを変更することはできません。いずれかの簡単な回避策がある場合は することは、私はJavaの終わりに回避策を持っているそうでなければ教えてください。しかし、私はちょうど は、この問題は、CDによって作成されたサブシェルによって引き起こされている... CDは、私はそれは私に多くの作業を救う望むように動作させることができれば?それはGoogleの検索結果が指摘していることです。 – Sougata

+0

@スガタ:他のスクリプトを変更できないと思います。そうであれば、 'shell.log'への完全な絶対パスを指定する必要があります。 'cd'はサブシェルを作成しません。あなたは、あなたが始めた場所とは異なるディレクトリにあり、新しいディレクトリにないファイルを閉じようとしています。 'cd'の代わりに' pushd'を使ってみてください。そうすれば、トラップ内と最後にファイルを閉じる前に 'popd'を行うことができます。また、終了する前に 'EXIT'トラップを設定する必要はありません。これらのコマンドを直接実行するだけです。 –

関連する問題