From owner-freebsd-questions@freebsd.org Sat Mar 6 05:27:43 2021 Return-Path: Delivered-To: freebsd-questions@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2D7BF5762DF for ; Sat, 6 Mar 2021 05:27:43 +0000 (UTC) (envelope-from freebsd@dreamchaser.org) Received: from nightmare.dreamchaser.org (ns.dreamchaser.org [66.109.141.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "dreamchaser.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DstR21VxGz4nTG for ; Sat, 6 Mar 2021 05:27:41 +0000 (UTC) (envelope-from freebsd@dreamchaser.org) Received: from breakaway.dreamchaser.org (breakaway [192.168.151.122]) by nightmare.dreamchaser.org (8.15.2/8.15.2) with ESMTP id 1265RerU091203; Fri, 5 Mar 2021 22:27:40 -0700 (MST) (envelope-from freebsd@dreamchaser.org) Reply-To: freebsd@dreamchaser.org Subject: Re: sed -i empty argument compatibility issue To: parv/freebsd Cc: freebsd-questions@freebsd.org References: <9178f6c5-631a-c2c2-c6b1-8def94a3397b@dreamchaser.org> <20210305142352297368817@bob.proulx.com> <606b8bfa-4fe5-883a-d7ac-99f41655f728@dreamchaser.org> From: Gary Aitken Message-ID: <43f97b81-9af7-ed3b-4dc2-12212ea84003@dreamchaser.org> Date: Fri, 5 Mar 2021 22:22:34 -0700 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (nightmare.dreamchaser.org [192.168.151.101]); Fri, 05 Mar 2021 22:27:40 -0700 (MST) X-Rspamd-Queue-Id: 4DstR21VxGz4nTG X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of freebsd@dreamchaser.org designates 66.109.141.57 as permitted sender) smtp.mailfrom=freebsd@dreamchaser.org X-Spamd-Result: default: False [-3.29 / 15.00]; HAS_REPLYTO(0.00)[freebsd@dreamchaser.org]; ARC_NA(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+mx]; NEURAL_HAM_LONG(-1.00)[-1.000]; TAGGED_RCPT(0.00)[freebsd]; MIME_GOOD(-0.10)[text/plain]; REPLYTO_ADDR_EQ_FROM(0.00)[]; DMARC_NA(0.00)[dreamchaser.org]; SPAMHAUS_ZRD(0.00)[66.109.141.57:from:127.0.2.255]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RBL_DBL_DONT_QUERY_IPS(0.00)[66.109.141.57:from]; NEURAL_HAM_SHORT(-0.99)[-0.991]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; RCVD_TLS_LAST(0.00)[]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; ASN(0.00)[asn:21947, ipnet:66.109.128.0/19, country:US]; MAILMAN_DEST(0.00)[freebsd-questions] X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Mar 2021 05:27:43 -0000 On 3/5/21 9:33 PM, parv/freebsd wrote: > > 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}" > > > This won't do, when ... > > > 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. > > ... > > #!/bin/sh > > # Set sed path & -i option based on "uname -a" output. > SED= > host_type=$( uname -a ) > case "${host_type}" in >   *Linux* ) >     SED="/usr/bin/sed -i''" >   ;; >   *FreeBSD* ) >     SED="/usr/bin/sed -i ''" >   ;; > esac > > # Set $@ to contain original arguments prefixed by sed with -i option. > set -- ${SED} $@ > # Now run the sed with the arguments given. > $@ Unfortunately, that involves adding a script that then has to be present on every system where the original software package is to be used, or incorporating it into the package itself. Which adds confusion for anyone working with other packages, which may or may not assume the presence of the script. > > 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. > > > If GNU sed could be installed, this would be most agreeable. But wouldn't that potentially break other ports which assume fbsd sed, and may have patches assuming that? Or system scripts which assume fbsd sed? > I prefer to use the absolute path to remove ambiguity about the kind of > sed being used, especially in the above case. for sure; that would get around the "which sed" issue, although it would require setup in the Makefile, which wouldn't be a big deal. But it would also require changing every "sed" to "$SED" in the package. Perhaps SED should be one of those variables that appear in all the cmake files that I don't understand... Gary