표준 입력을 파일로 사용하는 방법

표준 입력을 파일로 사용하는 방법

파일을 입력으로 요구하는 명령이 있는데 파일에서 입력을 가져오고 stdin임시 파일을 만들고 싶지 않습니다.

나는 다음을 수행하고 싶습니다 :

#!/bin/bash
osadecompile /dev/stdin < input_file.scpt

그러나 이로 인해 I/O 오류가 발생할 수 있습니다. 다음은 작동하지만 가능합니까?아니요임시 중간 파일을 사용하시겠습니까_?

#!/bin/bash
AS_FILE=$(mktemp)
cat - > "$AS_FILE"
osadecompile "$AS_FILE"
rm "$AS_FILE"

짐작하셨겠지만 저는 macOS에서배쉬 3.2. 그러나zsh 5.3솔루션도 환영받을 것입니다.

답변1

를 사용하면 zsh다음을 수행할 수 있습니다.

cmd =(cat)

=(...)파이프 대신 임시 파일을 사용하는 세 번째 형태의 프로세스 교체는 어디에 있습니까?

bash5.1 이하 의 경우 zsh빈 줄로 끝나지 않는 입력(및 NUL 바이트를 포함하지 않는 bash의 경우)에 대해 다음을 수행할 수 있습니다.

cmd /dev/fd/3 3<<< "$(cat)"

여기서 문자열(zsh에서)과 마찬가지로 여기서 문서(Bourne 셸에서)는 bash와 zsh 모두에서 (삭제된) 임시 파일을 통해 구현됩니다. macOS(Linux는 아님)에서는 파일이 한 번만 열린다고 가정합니다 cmd(그 안에서 자유롭게 검색할 수는 있지만). 각 열기는 이전 열기와 파일의 동일한 위치에서 시작되기 때문입니다 cmd. 위치는 파일의 시작 부분에 있다고 가정합니다.


1 bash 동작은 5.0에서 변경되었습니다. 여기서 bash는 임시 파일을 쓸 수 없도록 만들기 시작했고, 5.1에서는 bash가 작은 파일에 대해 임시 파일 대신 파이프를 사용하도록 전환했습니다.

관련 정보