【问题标题】:echo stderr and stdout to file from bash script variable从 bash 脚本变量将 stderr 和 stdout 回显到文件
【发布时间】:2014-01-10 10:52:59
【问题描述】:

我有一个 bash 脚本,在这个 bash 脚本中我有一个这样的 JAVARESULT 变量:

JAVARESULT=`java -cp ... parser_file $file $someextravar`

我想要的是在日志文件中捕获这个结果变量的标准错误和标准输出。

echo "$JAVARESULT" > $LOG_FILE

但我只得到标准输出而不是标准错误。我试过了:

echo "$JAVARESULT" &> $LOG_FILE

但我没有在日志文件中看到 java 错误。

【问题讨论】:

  • java -cp ... parser_file $file $someextravar &> $LOG_FILE?

标签: linux bash stdout stderr


【解决方案1】:

在每个基于 Unix 的系统中,每个进程都至少打开三个文件描述符。如您所知,文件描述符由数字标识。这三个标准文件描述符是:

  • 0 代表stdin
  • 1 代表stdout
  • 2 代表stderr

您要做的是将stderr 重定向到stdout,然后将stdout 重定向到一个文件。因此,在您的 JAVARESULT 变量中,您只需附加:

2>&1

这里的意思是:将stderr(文件描述符2)重定向到stdout(文件描述符1)。

【讨论】:

    【解决方案2】:

    试试这个:

    echo "$JAVARESULT" > $LOG_FILE 2>&1

    【讨论】:

    • 问题是JAVARESULT首先不包含标准错误。即使是这样,该参数也不会存储有关哪些部分来自标准输出以及哪些部分来自标准错误的信息:它只是一个大字符串。
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2012-11-19
    • 2011-03-02
    相关资源
    最近更新 更多