假设有一个文件"foo.txt"
,它是从以下内容创建的:
$ seq 1 10 > "foo.txt"
我试图读取文件的第一行和最后一行,我开始通过将文件重定向到子shell来实现,以便命令列表按顺序消耗文件 -- 每个命令从上一个命令离开的地方开始消耗输入,我猜想:
$ (head -1; tail -1) < "foo.txt"
1
10
然而,如果我使用一个临时文件描述符尝试相同的操作,输出结果将不同:
$ (head -1; tail -1) < <(seq 1 10)
1
问题:
我不确定如何命名
<(seq 1 10)
,但这个临时文件描述符和一个常规的文件描述符("foo.txt"
)之间有什么区别,导致子shell执行行为不同?如何实现将
"foo.txt"
重定向到子shell 的相同行为,但不需要临时文件 - 即不创建实际文件。
head
替换为sh -c "read line; echo "$line"'
,可以在不使用临时文件的情况下实现所需的行为。 - William Pursell