zsh에서 임시 파일을 피하세요

zsh에서 임시 파일을 피하세요

중복 가능성:
쉘 프로그래밍, 임시 파일 피하기

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하여 구현되며 마운트된 파일 시스템이 필요합니다.rczsh/dev/fd/

답변2

당신이 하고 있는 일에는 아무런 문제가 없습니다. 임시 파일이 생성되는 방식을 제외하고(실행 중인 스크립트가 동시에 두 번 실행된다면 어떻게 될까요?)

을 사용해야 합니다 mktemp.

관련 정보