나는 현재하고 있습니다 :
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"