Date: Fri, 5 Mar 2021 20:50:46 -0700 From: Gary Aitken <freebsd@dreamchaser.org> To: freebsd-questions@freebsd.org Subject: Re: sed -i empty argument compatibility issue Message-ID: <606b8bfa-4fe5-883a-d7ac-99f41655f728@dreamchaser.org> In-Reply-To: <20210305142352297368817@bob.proulx.com> References: <9178f6c5-631a-c2c2-c6b1-8def94a3397b@dreamchaser.org> <20210305142352297368817@bob.proulx.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 3/5/21 2:43 PM, Bob Proulx wrote: > Gary Aitken wrote: >> I'm trying to come up with a fix for a script in a port which >> invokes sed. The port comes from a linux environment, and the >> offending line looks like this: (This is in a cMake file.) ...> In order to port this then _something_ must be changed. As to what > must be changed that is up to you and judegement and the larger view > of everything in your environment. But off the top of my head these > different possibilities come to mind. > > 1. Edit the script and change this to that. This makes it run on > FreeBSD sed. Of course then this does not work the other direction. > > -COMMAND sed -i "/^# /d" "${outfile}" +COMMAND sed -i "" "/^# /d" > "${outfile}" > > 2. Use perl. Change that edit command to be this. This should work > the same everywhere that has perl. It does create a dependency upon > perl that might not have been present before. > > perl -i -lpe 'next if /^# /' "${outfile}" > > 3. Avoid -i and use a temporary file, just like in the old days. > However this introduces the need for temporary file handling. But > maybe that isn't important here. > > sed "/^# /d" "${outfile}" > "$tmpfile" && mv "$tmpfile" "${outfile}" > > 4. Introduce a "sed" wrapper in PATH that intercepts the call to the > real sed, detects this problematic usage case, and then DTRT does > the right thing with it. This wrapper could have all of the correct > temporary file handling needed to make this work. More involved to > do this but if I were faced with a large unknown code base and > expected to see a lot of this then I would consider it a good global > workaround for portability. > > 5. Hack a local FreeBSD sed version to detect this case and DTRT > with the option. > > 6. Compile GNU sed locally and install it in PATH earlier. This > would probably be a generally good option globally. However it's > possible you might run into portability problems in the reverse > case. Thanks for the list. That's two more than I came up with. I'm inclined to #2 (which I hadn't thought of) or #3. > Good luck! I'll be interested in hearing how things work out for > you. Thanks. I'm asking the authors for feedback. Gary
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?606b8bfa-4fe5-883a-d7ac-99f41655f728>