跨不同命令传递初始标准输入

pass initial stdin across different commands

我正在考虑编写一个文件,该文件的数据通过 stdin 传输,但是以流的第一行用于命名文件并且第二行以上是文件内容的方式对其进行操作。所以命令基本上是:

printf "foo\nbar" | tail +2 > $(head -1)

上面的问题是 head 从 stdin 接收它的值,但它似乎没有传递到 tail 导致生成一个空文件 foo

如果我使用也会发生同样的情况:

printf "foo\nbar" | tail +2 /dev/stdin > $(head -1 /dev/stdin)

所以我想知道是否有任何方法可以在多个命令中以非冗长的方式使用初始标准输入?

考虑一个小 shell 脚本

#! /bin/sh
read filename
cat > $filename

通过shell读取具有无缓冲读取的优点。一些实用程序将以缓冲模式读取,这可能会消耗第一行以外的一些数据。