파일을 입력으로 요구하는 명령이 있는데 파일에서 입력을 가져오고 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)
=(...)
파이프 대신 임시 파일을 사용하는 세 번째 형태의 프로세스 교체는 어디에 있습니까?
bash
5.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가 작은 파일에 대해 임시 파일 대신 파이프를 사용하도록 전환했습니다.