2013-02-24 3 views
0

표현식 (if 문의) 출력을 파일로 리디렉션하고 싶습니다. 예 : 그래서,BASH 평가 출력 리디렉션

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

위 작동하지 않습니다 : 나는의 표현은 문 './primitive'는 '가', 뭔가 같은 파일에 './primitives'의 출력을 리디렉션 할 시작 :

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

는 어떻게 파일에 './primitives'의 출력을 얻을 않으며, 만 문자열은 "프리미티브 OK."메아리 './primitives가'제대로 실행하는 경우?

보너스 포인트를 얻으려면 제대로 실행되면 '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. 

답변

0

첫 번째 예는 괜찮습니다. output.txt이 먼저 존재하는지 확인해야합니다. 두 가지 옵션이 있습니다 : >> 대신 >을 사용하십시오 (1은 불필요합니다. 파일 설명자가없는 경우 표준 출력이 기본적으로 리디렉션되므로) if 문 앞에 먼저 touch output.txt을 실행하면 그렇지 않습니다. 이미 존재합니다.

+0

위의 편집을 참조하십시오. – dje1990

+0

'primitives'의 출력물이'output.txt'에 추가됩니까? 그렇다면,'primitives'가 0이 아닌 종료 코드로 종료되어'if' 문의 본문이 실행되는 것을 방지합니다. – chepner

+0

'primitives'가 zero 코드로 끝내고 올바르게 실행되지만, echo는 output.txt 나 콘솔에서 출력되지 않습니다. 그래서'tee'를 잘못 사용한 것입니까? 어떤 생각? 나는 google을 가질 것이다. 감사합니다. – dje1990