svn commit: r326554 - in head: . usr.bin/sponge usr.bin/sponge/tests usr.bin/tee

Matt Joras matt.joras at gmail.com
Tue Dec 5 15:53:51 UTC 2017


On Dec 5, 2017 7:35 AM, "Devin Teske" <devin at shxd.cx> wrote:


> On Dec 5, 2017, at 5:00 AM, Hans Petter Selasky <hps at selasky.org> wrote:
>
>> On 12/05/17 13:58, Rodney W. Grimes wrote:
>> Further more, why does freebsd need this in base?
>
> Hi,
>
> I think this is useful. It could replace the "-i " (intermediate) option
for "sed" for example. It avoids creating temporary files when filtering
files, right?
>
> --HPS
>

Wth is wrong with:

data=$( sed -e '...' somefile ) &&
        echo "$data" > somefile

or

set -e
data=...
echo "$data" > ...

or

exec 3<<EOF
$( ... )
EOF
cat > ... <&3

or

(I digress)

Infinite variations, but the gist is that sponge looks to be trying to help
sh(1)/similar when help is unneeded.

Why buffer data into memory via fork-exec-pipe to sponge when you can
buffer to native namespace without pipe to sponge?

Am I missing something? Why do we need sponge(1)?
--
Devin

I do believe you are sort of missing the point. It is a utility that is
explicitly useful in shell pipelines, so when you want to do things as
one-liners. I like the utility and use the one from ports and my own
version in various things here and there. It is a common utility installed
in Linux distros and the top answer on Google for questions such as
"redirect shell output to same file". I think the outrage about adding a
tiny utility that's common elsewhere is a bit silly.

As for the implementation, I have my own version of sponge (hobby program
written in rust so not base-worthy), and it uses explicit temporary files
for larger outputs.

Matt


More information about the svn-src-head mailing list