1

これは、私がSystem.exit return code isn't detected by bash evalで意図したことのより良い言い回しです。私はbashスクリプトが必要です

  1. アプリケーションを実行します(私の場合はJavaアプリです)
  2. stderr をファイルに送信します
  3. stderr + stdout を端末に送信します
  4. アプリの終了コードを返す

なんらかの理由で、エンタープライズ アプリケーションの標準的な構成のように思えますが、これを行うのは難しいです...ありがとう!

[編集]

このスクリプトをラップしてソリューションをテストします。

#!/bin/sh
echo "This is Standard Out"
echo "This is Standard Error" >&2
cat meow
4

2 に答える 2

2

これで要件が満たされます:

#!/bin/bash

errlog="/var/log/my_app"

exec 2> >(tee "$errlog")

java -jar /path/to/app.jar

exit $?  

説明

  • exec 2 >catch STDERR (右側にファイルを指定すると、STDERR はこのファイルにリダイレクトされ、端末には表示されなくなります)
  • >( )bashプロセスの置換です(これにより、バックグラウンドでファイル記述子が作成されます)
  • tee端末にSTDERRを表示するためと、STDERRをログファイルに保存するための両方があります
于 2012-12-01T10:12:17.733 に答える
1
# Save old stdout
exec 3>&1
# Redirect stderr to pipe, stdout to saved descriptor, pipe goes to tee
app_command 2>&1 >&3 | tee errorfile
# close temporary descriptor now that app is done
exec 3>&-
于 2012-12-01T09:43:53.323 に答える