heredoc的,重定向和文件描述符

时间:2015-08-06 16:51:19

标签: shell heredoc

我知道这里有很多关于heredocs以及重定向和文件描述符的帖子,但我似乎找不到任何与我想做的事情有关的事情。

我想打开文件描述符到文件,然后将heredoc写入该文件描述符。

以下是我使用bash shell的内容:

exec 3>/tmp/testfile.txt
cat <<EOF>>3
write to fd using heredoc
EOF

我检查我的文件并将其清空。我假设它是空的,因为在heredoc中对我的文件描述符的引用转到了位桶。我尝试使用像&这样的&符号EOF>>&3但是在shell中引发了错误。

我怎样才能完成这项工作?

3 个答案:

答案 0 :(得分:2)

如果你写:

echo something >> 3

这将创建名为3字段。如果要引用文件描述符,则需要使用&3语法。如果要使用文件描述符附加到文件,可以执行以下操作:

exec 3>>/tmp/testfile.txt
cat <<EOF >&3
This is a test.
EOF

也就是说,当您使用exec语句打开文件描述符时,您决定追加与覆盖。如果你这样做了:

exec 3>/tmp/testfile.txt

这会覆盖文件而不是附加到文件。

答案 1 :(得分:0)

append redirection的Bash手册说:

  

附加输出的一般格式是:

[n]>>word

您已附加到文件3。但是,实际上,您不需要>>运算符;您需要将cat的标准输出发送到描述符3:

cat <<EOF 1>&3
write to fd using heredoc
EOF

这不会截断文件,因此无论如何都会实现'追加'。

答案 2 :(得分:-1)

好的,这就是答案:

exec 3>/tmp/testfile.txt
cat <<EOF 1>&3
this is a redirect to fd 3 via a heredoc
EOF