이 ping의 출력이 서브셸 외부에 있는 이유는 무엇입니까?

이 ping의 출력이 서브셸 외부에 있는 이유는 무엇입니까?

인터페이스가 연결되어 있는지 확인하는 간단한 스크립트가 있습니다.

connected=$(ping -I $1 -qc 1 8.8.8.8 \
  && echo "connected" \
  || echo "not connected")

echo "$connected" | tail -n1

나는 단순히 "연결됨" 또는 "연결되지 않음"을 반환해야 한다고 예상했습니다. 실제로 스크립트를 사용할 때 항상 출력 전에 경고가 표시됩니다.

ping: Warning: source address might be selected on device other than enp0s25.
not connected

여기서 경고는 어떻게 되나요? 서브셸의 일부가 아니어야 합니까?

답변1

ping경고는 표준 오류 로 전송되지만 포착되지는 않습니다. 무시하려면 /dev/null명시적으로 다음으로 리디렉션하세요.

connected=$(ping -I $1 -qc 1 8.8.8.8 2>/dev/null \
  && echo "connected" \
  || echo "not connected")

echo "$connected" | tail -n1

관련 정보