bash - bash脚本,将stderr定向到文件,将stdout + stderr定向到终端,并返回退出代码

标签 bash error-handling stdout stderr

这是我对System.exit return code isn't detected by bash eval的预期的更好措辞。我需要一个bash脚本

  • 运行一个应用程序(在我的情况下是一个Java应用程序)
  • 将stderr定向到文件
  • 将stderr + stdout定向到终端
  • 返回应用程序
  • 的退出代码

    由于某种原因,这很难做到,尽管在我看来,这就像企业应用程序的标准配置...
    谢谢!

    [编辑]

    通过包装此脚本来测试解决方案:
    #!/bin/sh
    echo "This is Standard Out"
    echo "This is Standard Error" >&2
    cat meow
    

    最佳答案

    这将满足您的要求:

    #!/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保存到日志文件
  • 关于bash - bash脚本,将stderr定向到文件,将stdout + stderr定向到终端,并返回退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657755/

    相关文章:

    linux - 如何删除作为根参数传递的文件?

    linux - 将共享 NTFS 上的文件批量重命名为 Windows 风格的文件名

    exception - Eiffel and Rescue子句中的错误处理

    error-handling - 在 Dynamics AX 2012 中显示自定义错误消息

    php - 如何处理Jquery.ajax触发的php脚本中的错误?

    linux - bash:当标准输出不存在时该怎么办

    Bash 条件执行

    bash 对列进行排序但不对相同的列进行排序

    node.js - child_process.spawn 标准输出成 block 出现

    perl - 同时打印到标准输出和文件