cat 只打印一个文件描述符

cat only prints one file descriptor

我正在尝试了解文件描述符的工作原理。

下面的script2.sh怎么没有输出b.txt的内容呢?

$ cat a.txt
Hello
$ cat b.txt
World

$ cat script1.sh 
cat a.txt b.txt
$ ./script1.sh 
Hello
World

$ cat script2.sh 
exec 19<a.txt
exec 20<b.txt
cat <&19 <&20
$ ./script2.sh 
World

<&19 表示“用 FD 19 替换标准输入”,<&20 表示“用 FD 20 替换标准输入”。这些互相破坏。如果您想读取两个 FD,则改为 cat /dev/fd/19 /dev/fd/20