BASH计算输出重定向

BASH计算输出重定向,bash,Bash,我想将表达式(if语句)的输出重定向到文件中。例如,我想将“./primitives”的输出重定向到一个文件中,“if”语句的表达式为“./primitives”,类似于: if ./primitives 1>> output.txt ; then echo "primitives OK. " | tee -a output.txt fi 上述方法不起作用,因此从以下几点开始: if ./primitives ; then echo "primitives OK. " fi

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

if ./primitives 1>> output.txt ; then
  echo "primitives OK. " | tee -a output.txt
fi
上述方法不起作用,因此从以下几点开始:

if ./primitives ; then
  echo "primitives OK. "
fi
如何将“./primitives”的输出放入一个文件中,然后只回显字符串“primitives OK”。如果“./primitives”执行正确

另外,如果文件“output.txt”执行正确,我如何仅重定向附加到文件“output.txt”的“/primitives”的标准输出,然后将“primitives 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.
所需控制台输出:

Compile OK. 
Compile OK. 
primitives OK. 
composites OK.

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

是否将
原语的输出添加到
output.txt
?如果是这样,则显示
primitives
以非零退出代码退出,阻止
If
语句体执行。
primitives
以零代码正确退出执行,但是echo没有在output.txt或控制台中输出,因此可能我使用了
tee
错误?有什么想法吗?我要一个谷歌。谢谢,我不认为这是误用了
tee
,因为当我注释管道并只留下
echo
,控制台和output.txt仍然没有输出任何内容。如果说
if/原语1>>output.txt;然后
取而代之的是?
/primitives
返回非零,但它似乎仍在正确执行,一定是出了其他问题。不管怎样,泰