heredoc、重定向和文件描述符
heredoc's, redirects and file descriptors
我知道这里有很多关于 heredocs 以及重定向和文件描述符的帖子,但我似乎找不到与我想做的事情相关的任何内容。
我想打开文件的文件描述符,然后将 heredoc 写入该文件描述符。
这是我使用 bash shell:
exec 3>/tmp/testfile.txt
cat <<EOF>>3
write to fd using heredoc
EOF
我检查了我的文件,它是空的。我假设它是空的,因为在 heredoc 中对我的文件描述符的引用转到了位桶。我尝试使用这样的符号 &
EOF>>&3
但这会在 shell.
中引发错误
我怎样才能做到这一点?
好的,这是答案:
exec 3>/tmp/testfile.txt
cat <<EOF 1>&3
this is a redirect to fd 3 via a heredoc
EOF
如果你写:
echo something >> 3
这将创建一个名为 3
的 filed。如果要引用文件描述符,则需要使用 &3
语法。如果你想使用文件描述符附加到文件,你可以这样做:
exec 3>>/tmp/testfile.txt
cat <<EOF >&3
This is a test.
EOF
也就是说,当您使用 exec
语句打开文件描述符时,您决定追加还是覆盖。如果您改为这样做:
exec 3>/tmp/testfile.txt
这将覆盖文件而不是附加到文件。
append redirection 的 Bash 手册说:
The general format for appending output is:
[n]>>word
您附加到文件 3
。但是,实际上,您不需要 >>
运算符;您需要将 cat
的标准输出发送到描述符 3:
cat <<EOF 1>&3
write to fd using heredoc
EOF
这不会截断文件,所以无论如何它都会达到 'append'。
我知道这里有很多关于 heredocs 以及重定向和文件描述符的帖子,但我似乎找不到与我想做的事情相关的任何内容。
我想打开文件的文件描述符,然后将 heredoc 写入该文件描述符。
这是我使用 bash shell:
exec 3>/tmp/testfile.txt
cat <<EOF>>3
write to fd using heredoc
EOF
我检查了我的文件,它是空的。我假设它是空的,因为在 heredoc 中对我的文件描述符的引用转到了位桶。我尝试使用这样的符号 &
EOF>>&3
但这会在 shell.
我怎样才能做到这一点?
好的,这是答案:
exec 3>/tmp/testfile.txt
cat <<EOF 1>&3
this is a redirect to fd 3 via a heredoc
EOF
如果你写:
echo something >> 3
这将创建一个名为 3
的 filed。如果要引用文件描述符,则需要使用 &3
语法。如果你想使用文件描述符附加到文件,你可以这样做:
exec 3>>/tmp/testfile.txt
cat <<EOF >&3
This is a test.
EOF
也就是说,当您使用 exec
语句打开文件描述符时,您决定追加还是覆盖。如果您改为这样做:
exec 3>/tmp/testfile.txt
这将覆盖文件而不是附加到文件。
append redirection 的 Bash 手册说:
The general format for appending output is:
[n]>>word
您附加到文件 3
。但是,实际上,您不需要 >>
运算符;您需要将 cat
的标准输出发送到描述符 3:
cat <<EOF 1>&3
write to fd using heredoc
EOF
这不会截断文件,所以无论如何它都会达到 'append'。