我想编写一个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。
答案 0 :(得分:4)
它是cat
的有效使用,但tee
命令是你想要的。它旨在将所有内容写入文件和stdout。
tee in.txt | grep foo > out.txt
答案 1 :(得分:-1)
cat的目的是连接(或#34; catenate")文件。如果它只有一个文件,那么将它与任何内容连接起来都是浪费时间,并使您付出代价。 -- era eriksson
所以,是的,它事实上没用。 tee
解决方案让我觉得这是最常用的POSIXy方法,但是如果两个进程的成本太高,你可以部署特定于shell的结构。