리디렉션 및 파이프 출력

리디렉션 및 파이프 출력

rpm -qa > file | wc -l0을 반환합니다. 내가 뭘 잘못했나요? 내 목표는 분명하다고 생각하지만 작동하지 않습니다. 이것은 xargs또는 을 위한 직업 입니까 tee?

답변1

예, 직업입니다 tee.

rpm -qa | tee file | wc -l

쉘 리디렉션( >)는 리디렉션이므로 출력 스트림을 한 번에 다른 위치로만 가리킬 수 있습니다. |그 시점에는 아무것도 볼 수 없을 것입니다.tee이는 스트림을 두 부분으로 분할하려는 목적으로 설계되었습니다. 한 부분은 파일로 이동하고 다른 부분은 여전히 ​​표준 출력에 있습니다. 위의 명령은 원하는 작업을 정확하게 수행합니다.

xargs여기서는 도움이 되지 않습니다.

답변2

예, 이것이 바로 티셔츠 작업입니다.

rpm -qa | tee file | wc -l

이 구조에서 a | ba의 표준 출력은 b의 표준 입력으로 이동합니다. a > file | ba 형식의 모든 출력이 파일로 이동하고 b의 표준 입력으로 아무 것도 이동하지 않는 경우 . tee이 명령은 표준 입력으로 받은 모든 것을 파일과 표준 출력으로 복사합니다.

답변3

rpm -qa > file ; wc -l file

당신이 원하는 것을해야합니다.

답변4

Bourne 또는 POSIX 호환 셸에서 리디렉션은 왼쪽에서 오른쪽으로 처리되며 파이프가 먼저 나타납니다. 따라서 명령은 다음과 같이 실행됩니다(하위 프로세스 2에서 발생하는 작업은 생략합니다).

  1. 파이프라인을 생성합니다.
  2. 두 개의 하위 프로세스 1과 2를 포크합니다.
  3. 표준 출력 1을 파이프로 리디렉션합니다.
  4. 표준 출력 1을 로 리디렉션합니다 file.
  5. 1. 실행 rpm -qa.

하위 프로세스 1의 출력을 두 채널(파일 및 파이프) 모두에 복사하려면 누군가 데이터의 두 복사본을 만드는 작업을 수행해야 합니다. 이것이 바로 tee목적입니다.

rpm -qa | tee file | wc -l

Zsh에는 다음과 같은 내장 출력 복사 기능이 있습니다.여러 운영 체제. zsh에서(이 옵션을 유지하는 zsh에서만 multios, POSIX 호환 쉘이나 POSIX 이전 Bourne 쉘, (t)csh에서는 아님) 작성한 것과 같은 명령은 데이터를 양방향으로 복사합니다. 리디렉션.

# in zsh
rpm -qa >file | wc -l

관련 정보