我知道这里有很多关于heredocs以及重定向和文件描述符的帖子,但我似乎找不到任何与我想做的事情有关的事情。
我想打开文件描述符到文件,然后将heredoc写入该文件描述符。
以下是我使用bash shell的内容:
exec 3>/tmp/testfile.txt
cat <<EOF>>3
write to fd using heredoc
EOF
我检查我的文件并将其清空。我假设它是空的,因为在heredoc中对我的文件描述符的引用转到了位桶。我尝试使用像&
这样的&符号EOF>>&3
但是在shell中引发了错误。
我怎样才能完成这项工作?
答案 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