여러 파이프로 끝나는 쉘 스크립트가 있고 grep ... | while read ...| sort | uniq
출력이 비어 있으면 1을 반환하고 싶지만 입력이 비어 있어도 uniq는 항상 0을 반환합니다.
지금까지 제가 찾은 최고의 솔루션은 빈 패턴으로 grep을 추가하는 것입니다 ... uniq | grep ''
. 이는 완벽하게 작동하지만 해킹처럼 느껴집니다.
그래서 내 질문은: 이 작업을 수행하는 더 나은/표준적인 방법이 있습니까?
몇 가지 제한사항:
- 나중에 다시 인쇄해야 하기 때문에 출력을 변수에 캡처하고 싶지 않습니다.
a=$(... | uniq); printf '%s\n' "$a"; [ -n "$a" ]
이것도 옳지 않다고 생각됩니다. - 또한 가능하다면 표준 도구(더 이상 유틸리티 없음)와 휴대용 도구를 선호합니다.
감사해요!
답변1
솔직히 | grep ''
괜찮다고 생각해요. 파이프라인에 이미 많은 프로그램이 있으므로 다른 프로그램을 개발해도 문제가 되지 않습니다. 그리고 여러분은 그것이 무엇 grep
인지 이미 알고 있으므로 이를 수행하기 위해 "스마트한" 쉘 조각을 작성할 필요가 없습니다.
의견에서는 | grep .
이것이 또 다른 가능성일 수도 있다고 언급했습니다. grep .
빈 줄은 일치하지 grep ''
않고 일치하게 되므로 원하는 내용에 따라 선택하세요.
그러나 이러한 사용은 grep
일반 독자에게는 즉시 명확하지 않을 수 있으므로 어쨌든 해당 목적에 대한 메모를 추가할 수 있습니다.
답변2
나는 이것이 일을 해야 한다고 생각합니다:
[ -n "$(command | tee /dev/tty)" ]
tee
command
출력을 stdout( 명령으로 평가 test
)과 터미널( )로 보내 /dev/tty
므로 출력을 변수에 캡처하지 않고도 볼 수 있습니다.
이것은 POSIX 호환 솔루션 AFAIK입니다.