From: Jeff King Date: Tue, 26 Jun 2018 21:01:00 GMT Subject: Re: [PATCH 29/29] t/test-lib: teach --chain-lint to detect broken &&-chains in subshells Message-ID: <20180626210100.GA3682@sigill.intra.peff.net> In-Reply-To: On Tue, Jun 26, 2018 at 04:46:18PM -0400, Eric Sunshine wrote: > > I'm not sure if there's a good solution, though. Even if you retained > > the subshells and instead did a chain-lint inside each subshell, like > > this: > > > > (exit 117) && > > one && > > ( > > (exit 117) && > > cd foo > > two > > ) && > > three > > I thought of that too, but the inner (exit 117) doesn't even get > invoked unless there is &&-chain breakage somewhere above that point > (for instance, if "one" lacks "&&"), so the inner (exit 117) doesn't > participate in the linting process at all. Oh, right. Not only does it not fix the problem, it's totally unworkable. :) > Some of these dangers can be de-thoothed during the linting phase by > defining do-nothing shell functions: > > cp () { :; } > mv () { :; } > ln () { :; } > > That, at least, makes the scariest case ("rm") much less so. Now that's an interesting idea. We can't catch every dangerous action (notably ">" would be hard to override), but it should be pretty cheap to cover some obvious ones. -Peff