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

Devin Teske devin at shxd.cx
Tue Dec 5 16:06:25 UTC 2017


> On Dec 5, 2017, at 7:53 AM, Matt Joras <matt.joras at gmail.com> wrote:
> 
> 
> 
> 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

The problems I have are:

1. Should be in ports

Not pre-installed on Linux, why should we have it in base?

If in base, people will target it thinking it solves a need that can't otherwise be solved and thus end up creating a script that is less portable because it is encumbered with dependencies specific to our base.

2. Teaches bad practice

sed ... somefile | sponge somefile

Ignores if there is a sed error and indiscriminately zeroes somefile.

3. Solution in search of a problem
-- 
Devin


More information about the svn-src-head mailing list