올바른 파이프 사용법

올바른 파이프 사용법

나는 현재하고 있습니다 :

cat file1 file2 | sort -k1,1 > temp_file
command [options] -i temp_file > result_file

-i는 명령 입력을 지정합니다. 이 경우에는 temp_file을 명시적으로 지정하지 않고 이를 수행할 수 있는 방법을 원합니다.

cat file1 file2 | sort -k1,1 | command [options] -i > result_file실패하고 -i 이후에 파일이 없다고 불평합니다.

나도 시도했다매개변수그러나 이렇게 하면 파일이 아닌 콘텐츠의 각 줄에서 실행됩니다.

답변1

일부 애플리케이션은 -stdin이 무엇을 의미하는지 이해합니다(맨페이지 확인).

sort... | cmd -i - > result.txt

대부분의 시스템에는 열 때 stdin을 복사하는 것처럼 동작하는 /dev/stdin특수 파일( 과 동일 )이 있으므로 다음과 같습니다./dev/fd/0

sort... | cmd -i /dev/stdin > result.txt

일부 쉘(ksh, zsh, bash)을 사용하여 다음을 작성할 수도 있습니다.

cmd -i <(sort...) > result.txt

이것이 작동하는 동안 파일은 파이프이므로 파이프가 아닙니다.탐색 가능한. 일부는 cmd검색 가능한 파일이나 일반 파일이 필요할 수 있으며 파일이 파이프인 경우 실패합니다. 글쎄, 임시 파일을 사용할 수밖에 없습니다.

이를 통해 다음 양식을 zsh사용할 수 있습니다.=(...)프로세스 교체:

cmd -i =(sort ...) > result.txt

zsh임시 파일을 자동으로 생성하고 채우고 정리하는 데 사용됩니다 .

와 동일 fish, 사용psub:

cmd -i (sort... | psub -f) > result.txt

의 경우 bash여전히 /dev/fd/x파일을 사용하고 있지만 이번에는 일반 임시 파일에서 보다 안정적인 정리를 위해 연 후 즉시 삭제되었습니다.

tmp=$(mktemp) && {
  rm -f -- "$file" &&
    sort... >&3 3>&- 4<&- &&
    cmd -i /dev/fd/4 3>&-
} 3> "$tmp" 4< "$tmp"

관련 정보