[英]Linux cat command and errors
我正在尝试 linux 重定向。 我有一个目录,其中只有一个文件 - a.txt
more a.txt
HELLO
如果我输入cat < a.txt b.txt
,我会得到
cat: b.txt: No such file or directory
如果我输入
cat < a.txt b.txt a.txt
我明白了
cat: b.txt: No such file or directory
HELLO
为什么我在尝试 cat < a.txt b.txt 时没有看到 HELLO? 我尝试了不同的组合 - 在 b.txt 之前/之后多次输入 a.txt 并看到一个模式,但无法弄清楚原因。
cat < a.txt a.txt b.txt
HELLO
cat: b.txt: No such file or directory
我假设您没有以正确的方式使用 cat 。 Cat 期望一个文件或多个文件作为参数而不是数据 stream。
使用 cat 显示文件:
cat a.txt
将其重定向到文件 b.txt
cat a.txt > b.txt
你的最后一个问题是模式。
您将 3 arguments 传递给 cat。
Arg1: ( < a.txt
) Arg2: ( a.txt
) Arg3: ( b.txt
)
参数 1 是废话 参数 2 是有效文件,参数 3 是不正确的文件。
< inputfile
是一个重定向。 <
将文件inputfile
重定向到命令的标准输入。 <
和inputfile
不会作为 arguments 传递给命令。 位置无关紧要,这些行都完全相同:
< inputfile command arg1 arg2
command < inputfile arg1 arg2
command arg1 < inputfile arg2
command arg1 arg2 < inputfile
为什么我在尝试 cat < a.txt b.txt 时没有看到 HELLO?
从man cat
:
With no FILE, or when FILE is -, read standard input.
因为给定 arguments,cat 没有从标准输入读取 - 标准输入被忽略。 相反,它从 arguments 上的给定FILE
读取。 所以标准输入上的a.txt
被忽略了。
你可以做:
< a.txt cat - b.txt
# or
cat - < a.txt b.txt
# or
cat - b.txt < a.txt
# or really just
cat a.txt b.txt
重定向意味着将文件内容发送到命令的 STDIN。
cat
的行为是从 STDOUT 的参数中读取文件的内容。 但如果没有参数,则从 STDIN 读取内容。
看到我在那里写argument(s)
了吗? 这是因为参数的数量可以是 0、1 或多个。
在简单的伪代码中,它是这样的:
if number of arguments = 0
print STDIN to STDOUT
else
for each file in arguments
print file content to STDOUT
示例 1:
cat a.txt
output:
HELLO
示例 2:
cat
(然后输入)
您将能够在终端中输入,当您单击输入时,输入的行将发送到cat
的 STDIN。 然后cat
将打印您刚刚输入的行。
cat < a.txt b.txt
在内部,它是这样工作的:
HELLO
文本的内容b.txt
,它是一个不存在的文件基于上述行为,它将单独打印b.txt
的内容,因为提供了 1 个参数。
但它没有找到文件b.txt
,所以它输出一条错误消息。
cat < a.txt b.txt a.txt
在内部,它是这样工作的:
HELLO
文本的内容b.txt
,它是一个不存在的文件a.txt
将 output: (STDIN 再次被忽略,因为有 2 个参数)
cat: b.txt: No such file or directory
HELLO
mycommand arg1 arg2 arg3
时,这意味着有 3 个命令行 arguments:分别为arg1
、 arg2
、 arg3
cat
):
echo "my data" | cat
my data
,保存,然后使用cat < data.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.