私はBashの初心者ですが、最近、コンピューターで仕事をするためにこのツールを学ぼうとしています。
私は今、ファイル記述子について自分自身に教えようとしています。私の実験のいくつかを共有させてください:
#!/bin/bash
# Some dummy multi-line content
read -d '' colours <<- 'EOF'
red
green
blue
EOF
# File descriptor 3 produces colours
exec 3< <(echo "$colours")
# File descriptor 4 filters colours
exec 4> >(grep --color=never green)
# File descriptor 5 is an unlimited supply of violet
exec 5< <(yes violet)
echo Reading colours from file descriptor 3...
cat <&3
echo ... done.
echo Reading colours from file descriptor 3 again...
cat <&3
echo ... done.
echo Filtering colours through file descriptor 4...
echo "$colours" >&4
echo ... done. # Race condition?
echo Dipping into some violet...
head <&5
echo ... done.
echo Dipping into some more violet...
head <&5
echo ... done.
上記からの出力を見ると、いくつかの質問が思い浮かびます。
- fd3は「消費」後に「使い果たされる」ようですが、最初の使用後にも自動的に閉じられますか?
- fd3は名前付きパイプとどう違うのですか?(私がすでに見たもの)
- コマンドの実行はいつ開始されますか?
yes
fd宣言時に?後で? - より多くのバイオレットが必要になったときに
yes
停止(CTRL-Z
またはその他)して再開しますか? - のPIDを取得するにはどうすればよい
yes
ですか? - 「アクティブな」fdsのリストを取得できますか?
- fd4を介したフィルタリングに関する非常に興味深い競合状態、回避できますか?
yes
私が停止したときにのみ停止しますexec 5>&-
か?- 私が閉じるかどうかは重要です
>&-
か<&-
?
とりあえずここでやめます。
ありがとう!
PS:部分的な(番号付きの)答えは大丈夫です..私は自分でさまざまな断片をまとめます..(一人からの包括的な答えは印象的ですが!)