将 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
来自 sed
和 fd=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
我想用 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
来自 sed
和 fd=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