@Override
  public Statement apply(Statement base, Description description) {
    return new Statement() {
      @Override
      public void evaluate() throws Throwable {
        folder = folderProvider.apply(description);
        defaultExecutor = executor().build();
        try {
          base.evaluate();
        } catch (MultipleFailureException e) {
          errors.addAll(e.getFailures());
        } catch (Throwable e) {
          errors.add(e);
        } finally {
          try {
            gfshContexts.forEach(GfshContext::killProcesses);
          } catch (Throwable e) {
            errors.add(e);
          }
        }

        MultipleFailureException.assertEmpty(errors);
      }
    };
  }
Returns a builder for a {@link GfshExecutor} that uses this {@code GfshRule}'s folder as the
working directory for invoked processes.

@return the builder
geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/GfshRule.java