我是一个 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:部分(编号)答案很好..我自己会把不同的点点滴滴放在一起..(尽管一个人的综合回答会令人印象深刻!)