将 heredocs 与命令的输出连接起来

concatenate heredocs with output of a command

我想用 pre-HEREDOC、post-HEREDOC 写入一个文件,在中间我想要一个命令的输出。可以用简洁的方式吗?

我能做到

(
    echo '#ifndef FOO_H'
    echo '#define FOO_H'
    echo
    echo

    sed foo.c -e '/=\|}/d' -e 's/ {/;/'

    echo '#endif'
) > foo.h

但我不喜欢它,因为它是有意的并且使用了很多回声。

我想尝试使用 cat 和 HEREDOCS:

我的想法是

cat > foo.h <<EOF
#ifndef FOO_H
#define FOO_H


EOF
sed foo.c -e '/=\|}/d' -e 's/ {/;/'
<<EOF2

#endif
EOF2

但我不知道如何让它们在语法上通过管道传输到 cat。

我也试过使用不同的文件描述符。告诉 cat 连接 fd=3 .. 5 并且之前有 fd=3 HEREDOC,fd=4 来自 sedfd=5 第二个 HEREDOC 的输出,但是问题是 5<<EOF 不去 cat.

cat >"${dir}/foo.h" /dev/fd/3 /dev/fd/4 /dev/fd/5 4<(
  sed foo.c -e '/=\|}/d' -e 's/ {/;/'
) \
  3<<EOF
#ifndef FOO_H
#define FOO_H

EOF
5<<EOF

#endif
EOF
cat <<EOF > foo.h
#ifndef FOO_H
#define FOO_H

$(sed -e '/=\|}/d' -e 's/ {/;/' foo.c)

#endif
EOF