On Wed, Jun 27, 2018 at 2:27 AM Johannes Sixt <j6t@xxxxxxxx> wrote: > Am 27.06.2018 um 04:15 schrieb Elijah Newren: > > On Tue, Jun 26, 2018 at 2:01 PM, Jeff King <peff@xxxxxxxx> wrote: > >> On Tue, Jun 26, 2018 at 04:46:18PM -0400, Eric Sunshine wrote: > >>> Some of these dangers can be de-thoothed during the linting phase by > >>> defining do-nothing shell functions: > >>> cp () { :; } > >>> 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. > > > > Crazy idea: maybe we could defang it a little more thoroughly with > > something like the following (apologies in advance if gmail whitespace > > damages this): > > > > - if test "OK-117" != "$(test_eval_ "(exit 117) && > > $1${LF}${LF}echo OK-\$?" 3>&1)" > > + if test "OK-117" != "$(test_eval_ "cd() { return 0; } > > && PATH=/dev/null && export PATH && (exit 117) && $1${LF}${LF}echo > > OK-\$?" 3>&1)" Interesting idea (coupled with Hannes's point below)... > I'd define all these functions as { return 1; } because we want to stop > any && chain as early as possible (and with an exit code that is not the > sentinel value). A very sensible suggestion.