stdin이 비어 있으면 명령을 실행하십시오.

stdin이 비어 있으면 명령을 실행하십시오.

xargs --no-run-if-empty나는 stdin이 비어 있는 경우에만 실행되도록 의 반대 작업을 수행하고 싶습니다 .

사용 예:

ip a | fgrep "inet " | grep -ve " tun" -e " lo"
# pipe it into something and echo localhost if empty

답변1

이 경우 grep아무것도 찾지 못하면(출력이 없음) 오류 코드를 반환합니다. 따라서 우리는 표준 출력을 볼 필요가 없습니다. 대신 오류 코드를 볼 수 있습니다. ||이 작업을 수행하고 이전 명령이 실패한 경우에만 다음 명령을 실행합니다.

ip a | fgrep "inet " | grep -ve " tun" -e " lo" || echo localhost

답변2

패키지는 도구를 moreutils제공합니다 ifne. 일반적으로 ifne표준 입력이 다음과 같은 경우에만 주어진 명령을 실행합니다.~ 아니다비어 있는. 그러나 그것은역동작방법:

-n

역방향 작동. 표준 입력이 비어 있으면 명령을 실행하십시오.

표준 입력이 비어 있지 않으면 ifne이 경우에는 표준 입력이 전달됩니다.

다음과 같이 사용하세요:

ip a | fgrep "inet " | grep -ve " tun" -e " lo" | ifne -n echo "localhost"

이것이 다른 답변과 다른 점입니다.

  • 솔루션은 명령의 종료 상태에 의존하지 않습니다.
  • ifne비어 있지 않으면 스트림을 소비하지 않습니다(이것이 원하는 것인지 확실하지 않습니다).

텍스트의 대안은 입니다 awk '{print} END {if (NR==0) print "localhost"}'. 텍스트가 아닌 데이터(POSIX: NUL 문자, {LINE_MAX} 초과, 불완전한 줄)의 경우 awk원하는 대로 작동하지 않을 수 있습니다.

답변3

이런 간단한 조건을 시도해 보셨나요?

[[ -z $(ip a | fgrep "inet " | grep -ve " tun" -e " lo") ]] && echo localhost

관련 정보