다음 명령은 어떻게 작동합니까?
pv file.tar.gz | tar -xz
내 이해에 따르면 파이프 연산자는 파이프 끝에 , 및 의 매핑을 |
만들고 의 매핑은 , 및 모두에 존재합니다 .pipe
stdout
pv
O_WRONLY
tar
stdin
O_RDONLY
O_WRONLY
O_RDONLY
pipefs
이것은 모두 훌륭하지만 내 화면에 다음이 인쇄됩니다.
31.1MiB 0:00:05 [6.17MiB/s] [===================================>] 100%
내가 아는 한 이 진행률 표시줄은 에 의해 생성되지 않습니다. tar
왜냐하면 사용 옵션이 있을 것이고 필요하지 않으므로 생성해야 하기 pv
때문입니다 . pv
하지만 어떻게? 에 매핑 pv
됩니다 .stdout
O_WRONLY
나는 또한 일부 쉘이 사용한다는 것을 읽었습니다.소켓 쌍교체할 파이프 pipefs
와소켓 쌍양방향으로 진행됩니다. 그러나 이는 둘 중 하나 또는 둘 다 완료될 때까지 stdin
두 명령을 묶는 것으로 보입니다 . stdout
위의 예에서는 진행률 표시줄이 실시간으로 업데이트되므로 그렇지 않습니다.
답변1
pv
진행 표시줄은 표준 오류에 기록되는 기능입니다 . pv
매뉴얼 에서 :
pv는 경과 시간, 완료율(진행률 표시줄 포함), 현재 처리량, 전송된 총 데이터, 예상 도착 시간 등의 정보를 제공하여 파이프라인을 통한 데이터 진행 상황을 표시합니다.
이를 사용하려면 두 프로세스 사이의 파이프에 삽입하고 적절한 옵션을 사용하십시오. 표준 입력은 표준 출력으로 전달되며 진행 상황은 표준 오류에 표시됩니다.
그러나 표준 출력 및 표준 오류를 리디렉션하는 동안 TTY에 쓰는 데 실제로 문제가 없습니다.
$ ( echo "out"; echo "error" >&2; echo "hi there" >$(tty) ) 2>&1 | cat >file
hi there
$ cat file
out
error
게다가, O_WRONLY
and O_RDONLY
는 명사가 아니라 형용사입니다. 표준 출력은 쓰기 전용이고 표준 입력은 읽기 전용입니다.