我想写一个shell脚本,接受标准输入的数据,将其写入文件,然后对其执行某些操作。
针对这个问题,假设我的脚本应该接受标准输入,将其写入in.txt
,然后从中grep一个字符串"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。
grep foo <in.txt >out.txt && nextcmd out.txt
这种方式呢?(利用复合命令)(注意:初始重定向是可选的) - David C. Rankinchmod
、chown
等,无法在标准输入上工作。在创建文件后更改其所有权或权限是一个有效的情况需要考虑。此外,/dev/stdin
在 POSIX 中未定义。 - Lone Learnerchmod
而不是grep
,在这种情况下,chmod 600 in.txt
也会“处理它”。 - Lone Learner