使用cat从标准输入中读取数据并将其写入文件并不是对cat的无用使用



我想写一个shell脚本,它接受来自标准输入的数据,将其写入一个文件,然后用它做一些事情。

出于这个问题的目的,让我们假设我的脚本应该接受标准输入,将其写入in.txt,然后从中生成一个字符串"foo",并将输出写入out.txt

这个剧本是我写的。

cat > in.txt
grep foo in.txt > out.txt

正如下面的一些答案所解释的,人们可以只使用

tee in.txt | grep foo > out.txt

如果是其他命令而不是grep不从标准输入读取,该怎么办?那么它是否成为cat的有效用法?

以下是chmod的一个这样的例子。

cat > in.txt
chmod -v 600 in.txt > out.txt

要求在脚本结束后,文件中的输入和输出都必须可用。

我想知道我的代码是在无用地使用cat,还是当cat可以这样调用时,这是一个完全有效的场景?

此外,有没有一种方法可以在不使用cat的情况下重写此代码,这样它就不会无用地使用任何命令?

注意:我关心的是适用于任何符合POSIX的shell的答案,而不仅仅是Bash或Linux。

这是对cat的有效使用,但tee命令正是您想要的。它的设计目的是将所有内容写入文件和stdout。

tee in.txt | grep foo > out.txt

cat的目的是连接(或"连接")文件。如果它只是一个文件,那么将它与任何内容连接在一起是浪费时间,并且会耗费一个过程。——eriksson 时代

所以,是的,它实际上是无用的。tee解决方案让我觉得是实现这一点的最POSIXy的方法,但如果两个进程的成本太高,则可以部署特定于shell的构造。

最新更新