BASH评估输出重定向

时间:2013-02-24 20:09:03

标签: bash

我想将表达式('if'语句)的输出重定向到文件中。例如。我想将'./primitives'的输出重定向到一个文件,其中'if'语句的表达式是'./primitive',类似于:

if ./primitives 1>> output.txt ; then
  echo "primitives OK. " | tee -a output.txt
fi

以上内容不起作用,所以从:

开始
if ./primitives ; then
  echo "primitives OK. "
fi

如果'./primitives'正确执行,如何将'./primitives'输出到文件中,然后只回显字符串“primitives OK。”

对于奖励点,如果正确执行,我将如何仅重定向附加到文件'output.txt'的'./primitives'的STDOUT,然后将“原语OK”打印到控制台和附加到文件?但是如果'./primitives'没有正确执行,不要打印任何东西到'output.txt'并只打印STDERR到控制台?

或者我是以错误的方式看待这整个问题?

由于

编辑:

当前脚本和输出是:

脚本:

#!/bin/bash

if ./compile.sh; then
  echo "Compile OK. " | tee output.txt

  if ./primitives 1>> output.txt ; then
    echo "primitives OK. " | tee -a output.txt
  fi

  if ./composites 1>> output.txt ; then
    echo "composites OK. " | tee -a output.txt
  fi

fi

当前控制台输出:

Compile OK. 

所需的控制台输出:

Compile OK. 
primitives OK. 
composites OK.

1 个答案:

答案 0 :(得分:0)

你的第一个例子很好;您只需要确保output.txt首先存在。您有两个选择:使用>而不是>>(1是不必要的,因为如果您不提供文件描述符,默认会重定向标准输出),或者之前执行touch output.txt如果文件尚不存在,则使用if语句创建文件。