따라서 "tee"를 사용하면 "ping"과 같은 명령의 출력을 파일뿐만 아니라 표준 출력으로 리디렉션할 수 있다는 것을 알고 있습니다.
예를 들어:
> ping google.com | tee somefile
그러면 터미널에 핑 통계가 표시되고 "somefile"에 기록됩니다.
이제 "ping"의 출력을 수정하려면 다음과 같이 "cut"을 사용할 수 있습니다.
> ping google.com | cut -d' ' -f 1
그러나 세 가지 명령을 모두 함께 사용하려면 출력이 없고 표준 출력에 빈 파일이 표시됩니다.
> ping google.com | cut -d' ' -f 1 | tee somefile
내가 뭘 잘못했나요? 더 좋은 방법이 있나요? 왠지 "티"를 올바르게 사용하지 않는 것 같은 느낌이 듭니다. 어떤 통찰력이라도 대단히 감사하겠습니다.
해당되는 경우 bash 쉘을 사용하고 있습니다.
답변1
파이프 명령이 출력을 비터미널 대상으로 버퍼링하고 있습니다. 결국에는 표시되지만 출력이 많이 생성되거나 ping 명령이 종료되는 경우에만 나타납니다.
ping -c 5 google.com
보낼 특정 수의 패킷을 설정하는 데 사용할 수 있으며 그러면 ping이 종료됩니다. 출력이 반환되고 파이프가 예상대로 작동해야 합니다.
편집: stdbuf
파이프 버퍼링을 피하고 awk
일부 내부 cut
버퍼링을 피하고 핑이 지속적으로 실행되도록 하는 또 다른 해결 방법은 다음과 같습니다.
ping www.google.com | stdbuf --output=0 awk '{print $1}' | tee /tmp/file