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

Lon*_*ner 5 shell posix cat

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

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

我写了这个剧本.

cat > in.txt
grep foo in.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

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

tee in.txt | grep foo > out.txt
Run Code Online (Sandbox Code Playgroud)

如果它是其他命令而grep不是从标准输入读取怎么办?它会成为猫的有效用途吗?

这是一个这样的例子chmod.

cat > in.txt
chmod -v 600 in.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

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

我想知道我的代码是否无用,cat或者如果这是一个完全有效的场景,cat可以这样调用吗?

此外,有没有办法重写这段代码而不使用cat它不会无用的任何命令?

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

tde*_*ney 5

它的有效用法是您想要cattee命令。它旨在将所有内容写入文件和stdout。

tee in.txt | grep foo > out.txt
Run Code Online (Sandbox Code Playgroud)

  • @LoneLearner-对。如果程序读取“ stdin”,则“ tee”是好的。如果需要文件,可以使用`cat> in.txt`。只要文件不是很大,它就会在操作系统的磁盘缓存中,因此速度会很快。 (2认同)