我正在考虑编写一个数据来自stdin的文件,但要以流的第一行用于命名文件,第2+行是文件内容的方式对其进行操作。所以命令基本上是:
printf "foonbar" | tail +2 > $(head -1)
上面的问题是head
从stdin接收它的值,但它似乎没有传递到tail
上,从而生成了一个空文件foo
。
如果我使用,也会发生同样的情况
printf "foonbar" | tail +2 /dev/stdin > $(head -1 /dev/stdin)
所以我想知道是否有任何方法可以在多个命令中以非详细的方式使用初始stdin?
考虑一个小型shell脚本
#! /bin/sh
read filename
cat > $filename
通过shell进行阅读具有无缓冲阅读的优点。一些实用程序将在缓冲模式下读取,这可能会消耗第一行以外的一些数据。