Bash에서 서브셸에 대한 익명 읽기/쓰기 파이프를 만들 수 있나요?

Bash에서 서브셸에 대한 익명 읽기/쓰기 파이프를 만들 수 있나요?

다른 스크립트에 첨부된 읽기-쓰기 파일 설명자로 "해결 서비스"를 bash 스크립트에 전달하려고 합니다.

따라서 다음과 같은 "서비스"가 제공됩니다 capitalize.

#!/usr/bin/env bash
while true; do read line; echo "${line^}"; done

클라이언트는 다음과 같습니다 client.

#!/usr/bin/env bash
echo $1 >&3
read line <&3
echo "${line}"

전화를 걸어 client foo 3< <(capitalize)결과를 기대하고 싶습니다 Foo. 이 호출은 표시와 함께 실패합니다 client: line 2: echo: write error: Bad file descriptor. 이는 노출된 파이프( capitalize할당되어 fd3전달된 client)가 읽기-쓰기가 아닌 읽기 전용이기 때문이라고 생각합니다.

그래서 두 셸 간에 공유할 수 있는 읽기 및 쓰기 파이프를 만드는 구문을 찾고 있습니다. 어쩌면 비슷한 것일 수도 있지만 client foo 3<> <>(capitalize)작동하지 않습니다.

미리 감사드립니다!


다음은 coproc대화형 셸을 사용하는 간단한 예입니다.

$ coproc cap { read line; echo ${line^}; }
$ echo ${cap[@]}
59 54
$ echo foo >&54
$ read line <&59
[1]+  Done                    coproc cap { read line; echo ${line^}; }
$ echo $line
Foo

클라이언트에게 파일 설명자를 보낼 때 아직 구문을 파악하지 못했습니다.

client다음과 같이 입력과 출력에 서로 다른 파일 설명자를 사용하도록 업데이트한다고 가정해 보겠습니다 .

#!/usr/bin/env bash
echo $1 >&3
read line <&4
echo "${line}"

그럼 이걸 해볼까...

$ coproc SVC { ./capitalize; }
$ ./client foo 3>&${SVC[1]} 4<&${SVC[0]}
./client: line 2: 3: Bad file descriptor
./client: line 3: 4: Bad file descriptor

1과 0의 파일 설명자 SVC가 슬롯 3과 4에 복사되어 전달되지 않는 이유는 무엇입니까 ./client?

음... 거의 다 왔어...

관련 정보