다른 스크립트에 첨부된 읽기-쓰기 파일 설명자로 "해결 서비스"를 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
?
음... 거의 다 왔어...