別のスクリプトに添付されている読み取り/書き込みファイル記述子として、「解決サービス」を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
)が読み取り - 書き込みではなく読み取り専用であるためです。
そのため、2つのシェル間で共有できる読み取りおよび書き込みパイプを作成する構文を探しています。たぶん似ているかもしれませんが、うまく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
?
うーん…ほぼすべて来ました…