Re: Rationalizing sed -i/-I (in-place editing) argument handling

From: Ian Lepore <ian_at_freebsd.org>
Date: Mon, 08 Mar 2021 13:55:52 -0700
On Mon, 2021-03-08 at 15:13 -0500, Ed Maste wrote:
> A relatively minor but longstanding incompatibility between FreeBSD
> and many other systems is the way sed handles backup files for
> in-place editing -- sed's -I and -i options. GNU sed and other BSDs
> accept an optional argument: -I.bak will save a backup file with a
> .bak extension, and -I with no argument will not create a backup
> file.
> FreeBSD currently accepts either -I.bak or -I .bak to save a backup
> with the given extension, and -I "" (an empty argument) to specify no
> backup.
> 
> I've been tripped up by this in the past and I know many others have.
> Most recently tobik_at_  filed PR 254091 for this. Now, I think a single
> change to make -i/-I to be compatible with other sed implementations
> in one step is too much of a POLA violation, but I think it can
> reasonably be done in stages:
> 
> 1. Update the man page to indicate that -i/-I should not have a space
> between the flag and the extension. This is compatible with current
> FreeBSD sed, other BSDs sed, GNU sed, and my proposed changes below.
> No backup is still a special case and remains as -I "".
> 
> I've opened https://reviews.freebsd.org/D29128 with proposed man page
> changes.
> 
> 2. Continue accepting -I .bak, but emit a warning suggesting the use
> of -I.bak instead.
> 
> 3. Change -I/-i to getopt optional arguments, but keep a special case
> for -I/-i "". At this point -I .bak becomes invalid as with other
> seds, and specifying no backup can be done with either -I "" or -I
> with no argument. This relies on an empty argument having no other
> sensible interpretation.
> 
> 4. Continue accepting -I "" to specify no backup, but emit a warning
> suggesting the use of -I with no argument.
> 
> 5. Retire the special case for -I "".
> 
> These steps could be done over an extended period of time (such as
> one
> major release to another) - this is most important between steps 2
> and
> 3.
> 
> Please let me know what you think, and if there's something I've
> missed.
> 

As someone who has to take care of common software that runs on
everything from freebsd 8 through -current, I HATE the very idea of
this.  If we keep whittling away at the backwards compatibility freebsd
is so famous for, I'll have abosolutely zero arguments left for why
$work shouldn't just switch to the much more popular and better-
supported linux.

I also hate the idea of requiring no space between -I and its related
value.  That seems like a huge POLA violation compared to how virtually
every other command's options and arguments work.

-- Ian
Received on Mon Mar 08 2021 - 19:55:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:27 UTC