这是我在System.exit return code isn't detected by bash eval中更好的措辞。我需要一个
的bash脚本出于某种原因,这很难做到,尽管在我看来它就像是企业应用程序的标准配置...... 谢谢!
[编辑]
通过包装此脚本来测试解决方案:
#!/bin/sh
echo "This is Standard Out"
echo "This is Standard Error" >&2
cat meow
答案 0 :(得分: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&amp;将STDERR保存到日志文件答案 1 :(得分: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>&-