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

时间:2016-01-01 03:23:02

标签: shell posix cat

我想编写一个shell脚本,它接受来自标准输入的数据,将其写入文件,然后对其执行某些操作。

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

我写了这个剧本。

out.txt

如下面的一些答案中所述,可以使用

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

如果是其他命令而不是tee in.txt | grep foo > out.txt 不能从标准输入读取,该怎么办?它会成为猫的有效用途吗?

以下是grep的一个示例。

chmod

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

我想知道我的代码是否对cat > in.txt chmod -v 600 in.txt > out.txt 进行了无用的使用,或者当cat可能像这样调用时,这是一个完全有效的方案吗?

另外,有没有办法在不使用cat的情况下重写此代码,这样就不会无用地使用任何命令?

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

2 个答案:

答案 0 :(得分:4)

它是cat的有效使用,但tee命令是你想要的。它旨在将所有内容写入文件和stdout。

tee in.txt | grep foo > out.txt

答案 1 :(得分:-1)

  

cat的目的是连接(或#34; catenate")文件。如果它只有一个文件,那么将它与任何内容连接起来都是浪费时间,并使您付出代价。 -- era eriksson

所以,是的,它事实上没用。 tee解决方案让我觉得这是最常用的POSIXy方法,但是如果两个进程的成本太高,你可以部署特定于shell的结构。