![bash를 사용하여 명령에 하위 프로세스를 전달하는 방법](https://linux55.com/image/168052/bash%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%AA%85%EB%A0%B9%EC%97%90%20%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
여러 출력을 하나의 명령으로 파이프하기 위해 하위 프로세스를 사용하려고 합니다. 내 명령은 다음과 같습니다(축약된 버전).
cat "$1"
one=cat "$1"
의 출력은 command <(echo "foo")
다음과 같습니다
foo
/dev/fd/63: Permission denied
작동 하므로 cat "$1"
함수에 하위 프로세스의 출력을 읽을 수 있는 권한이 있다고 가정하지만 이를 변수에 넣으려고 하면 권한이 거부됩니다. 왜 이런 일이 발생하며 해결책이 있습니까?
답변1
귀하의 질문이 완전히 명확하지 않습니다. 하지만 x
다음을 수행하는 명령이 있다고 생각합니다 .
cat "$1"
one=$(cat "$1")
이제 이렇게 하면 x <(echo "foo")
오류가 발생합니다.
<(...)
이는 구조가 작동하는 방식 때문입니다 .
기본적으로 실행되어 echo foo
출력을 임시 파일 핸들( /dev/fd/63
)에 연결한 다음 매개변수로 전달합니다.
이제 첫 번째 cat
명령이 전체 입력을 읽습니다. 이는 입력이 남아 있지 않음을 의미합니다. 그래서 당신의두번째 cat
명령에 읽을 내용이 없습니다. echo
프로세스가 완료되었고 읽을 열려 있는 핸들이 없기 때문에 오류가 발생합니다 .
간단한 형태로 특별 버전을 완성했습니다.
echo "foo" | {
cat
one=$(cat)
}
그러나 독창적인 파일 처리 마법이 있습니다.