0

式 ('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 のみをリダイレクトし、「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.
4

1 に答える 1

0

最初の例は問題ありません。output.txtそれが最初に存在することを確認する必要があります。2つのオプションがあります。>代わりに使用するか>>(ファイル記述子を指定しない場合は標準出力がデフォルトでリダイレクトされるため、1は不要です)、ステートメントのtouch output.txt前に実行ifしてファイルがまだ存在しない場合は作成します。

于 2013-02-24T20:28:41.507 に答える