표준 출력이 생성되면 Linux 명령줄이 실패합니다.

표준 출력이 생성되면 Linux 명령줄이 실패합니다.

Linux에서 출력을 파이프하는 간단한 유틸리티가 있습니까?

  • 표준 출력(및/또는 표준 오류)에 출력이 없으면 성공 코드가 반환됩니다.
  • 표준 출력(및/또는 표준 오류)으로 출력이 생성되면 실패 코드가 반환됩니다.

몇 가지 컨텍스트를 제공하기 위해 내가 실행한 명령은 다음과 같습니다.

svn mergeinfo --show-revs eligible
http://mysvnserver.example.com/SVF/repos/common/abc/branches/abc-1.7
http://mysvnserver.example.com/SVF/repos/common/abc/trunk

분기에 병합되지 않은 항목이 있는 경우 명령은 표준 출력에 개정 번호 목록을 반환합니다. 이상적으로는 추가 명령을 다음과 같이 호출할 수 있습니다.

  • 표준 출력의 항목을 감지하고 오류 조건을 Linux에 반환합니다.
  • 터미널에서 끝나도록 표준 출력을 전달합니다. 나는 그것을 억제하지 않는 것이 좋습니다.

답변1

이것이 grep당신이 찾고 있는 것입니다:

if svn ... 2>&1 | grep '^'; then
  echo "there was some output"
else
  echo "there wasn't"
fi

비어 있지 않거나 비어 있지 않은 줄을 확인하기 위해 또는 grep '^'로 바꿀 수 있습니다 (그러나 이렇게 하면 출력에서 ​​빈/빈 줄이 제거됩니다).grep .grep '[^[:blank:]]'

grep( 입력에 NUL 바이트 또는 너무 길거나 종료되지 않은 줄과 같은 비텍스트 데이터가 포함된 경우 svn동작은 구현마다 다릅니다 (그러나 이런 일은 발생하지 않습니다).

답변2

기존 주문은 잘 모르겠네요... DIY 주문은 안되나요? 포장지? 파일에 출력을 쓰고 파일이 비어 있는지 여부에 따라 종료하시겠습니까?

래퍼 방법, 여전히 출력을 보고 출력에서 ​​stdout과 stderr을 분리하기를 원한다고 가정합니다.

#!/bin/bash

TMPFILE=/tmp/allout.$$
TMPPIPE=/tmp/errout.$$
SAVERC=/tmp/saverc.$$

cleanup() {
   [ -p $TMPPIPE ] && rm $TMPPIPE
   [ -f $TMPFILE ] && rm $TMPFILE
}
trap cleanup EXIT

# Set up output/display of std err
[ -p $TMPPIPE ] || mkfifo $TMPPIPE
cat $TMPPIPE | tee -a $TMPFILE1 >&2 &

(eval "$*" 2>$TMPPIPE
echo $? > $SAVERC
) | tee -a $TMPFILE

[ -s $TMPFILE ] && exit 1
exit $(cat $SAVERC)

답변3

이를 사용하여 wc출력의 문자 수를 계산할 수 있습니다.

$ [ $(ls 2>&1 | wc -c) = "0" ]
$ echo $?
1
$ [ $(echo -n '' 2>&1 | wc -c) = "0" ]
$ echo $?
0

2>&1stderr를 stdout으로 리디렉션 해야 합니다 .

관련 정보