중복 가능성:
쉘 프로그래밍, 임시 파일 피하기
data.txt
파일 과 명령이 있다고 가정해 보겠습니다 cmd
.
cmd
하나의 매개변수인 파일을 허용합니다. 또는 stdin
.
이제 say data.txt
는 대문자이지만 cmd
모든 데이터가 소문자인 경우에만 작동합니다.
물론 당신은 이것을 할 수 있습니다
tr '[:upper:]' '[:lower:]' < data.txt > lowercase_data.txt
cmd lowercase_data.txt
rm lowercase_data.txt
그런데 통합할 수 있는 방법이 있나요?
원본 파일 주위의 래퍼처럼 필터를 적용한 다음 임시 파일에 대한 참조를 전달하고 마지막으로 임시 파일이 삭제됩니다.
zsh를 사용하고 있습니다.
답변1
zsh
지원하다프로세스 교체, 이는 요구 사항을 충족해야 합니다.
A command of the form =(...) is replaced with the name of a file containing its output.
tr
따라서 예를 들어 출력을 에 전달하기 위해 임시 파일을 수동으로 생성하지 않으려면 다음 cmd
과 같이 말할 수 있습니다.
cmd =(tr '[:upper:]' '[:lower:]' < data.txt)
다른 쉘의 경우에는 다음과 같습니다.
bash
:cmd <(tr '[:upper:]' '[:lower:]' < data.txt)
ksh
:cmd <(tr '[:upper:]' '[:lower:]' < data.txt)
rc
:cmd <{tr '[:upper:]' '[:lower:]' < data.txt}
bash
프로세스 교체 는 임시 파일 이 아닌 명명된 파이프를 사용 ksh
하여 구현되며 마운트된 파일 시스템이 필요합니다.rc
zsh
/dev/fd/
답변2
당신이 하고 있는 일에는 아무런 문제가 없습니다. 임시 파일이 생성되는 방식을 제외하고(실행 중인 스크립트가 동시에 두 번 실행된다면 어떻게 될까요?)
을 사용해야 합니다 mktemp
.