여러 출력을 하나의 명령으로 파이프하기 위해 하위 프로세스를 사용하려고 합니다. 내 명령은 다음과 같습니다(축약된 버전).
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)
}
그러나 독창적인 파일 처리 마법이 있습니다.