2013-02-24 67 views
0

我想将表达式('if'语句)的输出重定向到文件中。例如。我想“./primitives'的输出重定向到一个文件中,其中表达的‘如果’语句是” ./primitive”,是这样的:BASH评估输出重定向

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

以上将无法工作,所以从开始:

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

我怎么“./primitives'的输出到一个文件,然后只能随声附和字符串‘原始人确定’。如果” ./primitives'正确执行?

对于加分,我怎么会重定向的唯一标准输出” ./primitives'附加到文件‘output.txt的’如果执行正确,然后打印‘元确定。’到控制台和附加到两个文件?但是,如果'./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. 

回答

0

你的第一个例子是罚款;你只需要确保首先存在output.txt。你有两种选择:使用>代替>>(1是不必要的,因为标准输出是默认重定向,如果你不给一个文件描述符),或者您if语句之前执行touch output.txt创建的文件,如果它不已经存在。

+0

不是,请参阅上面的编辑为什么不是 – dje1990 2013-02-24 20:33:52

+0

是否将'primitives'的输出附加到'output.txt'?如果是这样的话,看起来'primitives'正在退出时带有一个非零的退出代码,从而阻止执行'if'语句的主体。 – chepner 2013-02-24 20:40:19

+0

'primitives'正在执行零代码正确退出,但是echo不会在output.txt或控制台输出,所以也许我使用了'tee'错误?任何想法?我会有一个谷歌。由于 – dje1990 2013-02-24 20:43:31