2012-12-01 45 views
1

這是我在System.exit return code isn't detected by bash eval中打算的更好的措辭。我需要一個bash腳本,bash腳本將stderr導向文件,stdout + stderr到終端,並返回退出代碼

  1. 運行的應用程序(在我的情況下,它是一個Java應用程序)
  2. 會指示錯誤輸出到一個文件
  3. 指導標準錯誤+標準輸出到終端
  4. 返回的退出代碼應用程序

由於某種原因,這是很難做到的,儘管它在我看來就像一個企業應用程序的標準配置... 謝謝!

[編輯]通過包裝這個腳本

測試解決方案:

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

回答

2

這將做您的要求:

#!/bin/bash 

errlog="/var/log/my_app" 

exec 2> >(tee "$errlog") 

java -jar /path/to/app.jar 

exit $? 

解釋

  • exec 2 >抓STDERR(如果提供正確的文件,STDERR將在此文件被重定向並沒有更多的終端上)
  • >()是一個bash process substitution(這在後臺創建文件描述符)
  • tee是否有在終端&上顯示STDERR以將STDERR保存到日誌文件中
+0

這太好了。那麼我什麼時候想要在沒有流程替代的情況下使用T恤呢? – ihadanny

+0

'tee'對終端顯示和寫入文件都很有用:http://pastie.org/5468341請參閱'man 1 tee' –

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>&- 
+0

不錯!怎麼樣的錯誤代碼? – ihadanny

相關問題