OTOH I understand that there's a little gap in the tool landscape.
Astonishingly, there doesn't seem to exist a trivial tool to redirect
from standard input (or any other input file descriptor) to a file.
I wrote such a little tool in the attached:
$ src/sink --help
Usage: src/sink [OPTION]... FILE
Copy input stream to FILE.
Mandatory arguments to long options are mandatory for short options too.
-a, --append append to the given FILE, do not overwrite
-c, --create ensure to create FILE, error if exists
-i, --input-stream=FD read from stream FD instead of standard input
The default input stream number FD is 0, representing the standard input.
This allows not only to copy data from standard input, but from any
file descriptor open for reading. It also allows control over
how the output file will be opened (e.g. with O_CREAT|E_EXCL).
The OPs case would look like:
echo 'foo' | sudo sink /etc/foo
or
echo 'foo' | sudo sink -a /etc/foo # append.
or
echo 'foo' | sudo sink -c /etc/foo # ensure creation of the file.
I'm not sure if this will ever be considered for inclusion -
I just did it "for fun". ;-)
Have a nice day,
Berny