Bash: 标准输入重定向后的多个文件
Bash: multiple files after standard input redirection
嘿,我已经研究了一段时间了,我想知道是否有人可以在 bash shell.
上解释这个特定功能的机制
假设我们有 3 个文件:test1.txt
、test2.txt
和 test3.txt
。
每个文件的内容:
test1.txt
= "foo"
test2.txt
= "酒吧"
test3.txt
= "你好世界"
如果我们 运行 在 bash shell 上执行以下命令:cat < test1.txt test2.txt test3.txt
我们将得到:
bar
hello world
我的问题是为什么 test1.txt
的内容在这种情况下被忽略,如果有人有任何好的资源,我可以阅读这个特定功能。
在识别参数之前处理输入重定向。例如你显示的命令相当于每个
< test1.txt cat test2.txt test3.txt
cat test2.txt < test1.txt test3.txt
cat test2.txt test3.txt < test1.txt
无论如何,cat
的标准输入是 test1.txt
,它接收两个命令行参数 test2.txt
和 test3.txt
。
然而,cat
只有在没有命名输入文件的参数时才从其标准输入中读取。如果要从标准输入和命名文件中读取,请使用 -
作为标准输入的“名称”。
# Same result as cat test1.txt test2.txt test3.txt
cat - test2.txt test3.txt < test1.txt
默认情况下,cat
(与大多数实用程序一样)只有在没有文件名参数的情况下才从标准输入读取。由于您将 test2.txt
和 test3.txt
作为文件名传递,因此它会忽略输入重定向。
但是,您可以使用 -
作为参数来表示标准。所以你可以这样做:
cat - test2.txt test3.txt < test1.txt
当您从文件重定向时这不是很有用,因为您可以只提供文件名作为普通参数而不是使用重定向,但它在管道时很有用:
grep foo test1.txt | cat - test2.txt test3.txt
嘿,我已经研究了一段时间了,我想知道是否有人可以在 bash shell.
上解释这个特定功能的机制假设我们有 3 个文件:test1.txt
、test2.txt
和 test3.txt
。
每个文件的内容:
test1.txt
= "foo"
test2.txt
= "酒吧"
test3.txt
= "你好世界"
如果我们 运行 在 bash shell 上执行以下命令:cat < test1.txt test2.txt test3.txt
我们将得到:
bar
hello world
我的问题是为什么 test1.txt
的内容在这种情况下被忽略,如果有人有任何好的资源,我可以阅读这个特定功能。
在识别参数之前处理输入重定向。例如你显示的命令相当于每个
< test1.txt cat test2.txt test3.txt
cat test2.txt < test1.txt test3.txt
cat test2.txt test3.txt < test1.txt
无论如何,cat
的标准输入是 test1.txt
,它接收两个命令行参数 test2.txt
和 test3.txt
。
cat
只有在没有命名输入文件的参数时才从其标准输入中读取。如果要从标准输入和命名文件中读取,请使用 -
作为标准输入的“名称”。
# Same result as cat test1.txt test2.txt test3.txt
cat - test2.txt test3.txt < test1.txt
默认情况下,cat
(与大多数实用程序一样)只有在没有文件名参数的情况下才从标准输入读取。由于您将 test2.txt
和 test3.txt
作为文件名传递,因此它会忽略输入重定向。
但是,您可以使用 -
作为参数来表示标准。所以你可以这样做:
cat - test2.txt test3.txt < test1.txt
当您从文件重定向时这不是很有用,因为您可以只提供文件名作为普通参数而不是使用重定向,但它在管道时很有用:
grep foo test1.txt | cat - test2.txt test3.txt