質問するログイン新規登録

回答編集履歴

1

見解の訂正

2020/10/24 10:09

投稿

angel_p_57
angel_p_57

スコア1681

answer CHANGED
@@ -1,8 +1,17 @@
1
- 正しいか正しくないかで言えば、「正しくない」だと思います。
1
+ 正しいか正しくないかで言えば、「正しくない」だと思います。→ 訂正します
2
-
2
+ -- 最初の見解
3
3
  なぜかというと、`<(:)` で作られるのは、無名のパイプの読み込み側の口で、それを `<>` で読み書き両用に使おうとしているからです。
4
4
  ※無名パイプは、読み込み・書き込みの2つの口が別々にできることになっているので、その方向性を違えて使った場合の保証は、多分どこにもされていない。
5
5
 
6
6
  そういう意味で、双方向のパイプを使いたい場合は coproc を選ぶか、今回のような片方向の変則的な使い方の場合は無理にパイプにせずに `$()` や `` を使って出力をとりこんでおくか、そこら辺が妥当とは思います。
7
7
 
8
- ただ、このアイデア自体は個人的には好きですね。考え付きませんでした。
8
+ ただ、このアイデア自体は個人的には好きですね。考え付きませんでした。
9
+
10
+ --
11
+ 以下訂正: Linuxならありな気がしてきました。
12
+
13
+ * `<> <(:)` をする場合は、「無名パイプの読み込み側FDを読み書き両用でFDコピー」ではなく、「無名パイプ実体へのシンボリックリンク ( `/dev/fd/数値` ) を読み書き両用で別途オープン」なので「読み込み側だから」という理由は不当
14
+ * 明確にドキュメント化されてるかは分からないが、Linuxでは無名パイプはpipefsという内部的なファイルシステム上のfifoとして扱われるので、名前付きパイプと(ファイル名が明確に見える以外の)違いはない
15
+ * 名前付きパイプ(fifo)を読み書き両用でオープンするのは、POSIX的には保証されていないが、Linuxでは動作する。( https://linuxjm.osdn.jp/html/LDP_man-pages/man7/fifo.7.html 参照 )
16
+
17
+ ということで、Linuxならテンポラリな名前付きパイプと同等、で良いと思います。