anchor.diff:  %% immediately kill the script. ctrl-g, however, works fine
   
   shell(State) ->
  +    setup_paths(State),
  +    ok = reread_config(State),
  +    maybe_boot_apps(State),
  +    setup_shell(),
  +    %% try to read in sys.config file
  +    %% this call never returns (until user quits shell)
  +    timer:sleep(infinity).
  +
  +info() ->
  +    "Start a shell with project and deps preloaded similar to~n'erl -pa ebin -pa deps/*/ebin'.~n".
  +
  +setup_shell() ->
       %% scan all processes for any with references to the old user and save them to
       %% update later
       NeedsUpdate = [Pid || Pid <- erlang:processes(),
  
positive.code: 
  -spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
  init(State) ->
      State1 = rebar_state:add_provider(State, providers:create([{name, ?PROVIDER},
                                                                 {module, ?MODULE},
                                                                 {bare, false},
                                                                 {deps, ?DEPS},
                                                                 {example, "rebar3 shell"},
                                                                 {short_desc, "Run shell with project apps and deps in path."},
                                                                 {desc, info()},
                                                                 {opts, [{config, undefined, "config", string, "Path to the config file to use. Defaults to the sys_config defined for relx, if present."}]}])),
      {ok, State1}.
  
  -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
  
negative.code:     %% disable the simple error_logger (which may have been added multiple
      %% times). removes at most the error_logger added by init and the
      %% error_logger added by the tty handler
      ok = remove_error_handler(3).
  
  setup_paths(State) ->
      %% Add deps to path
      code:add_pathsa(rebar_state:code_paths(State, all_deps)),
      %% add project app test paths
      ok = add_test_paths(State).
  
  reread_config(State) ->
      case find_config(State) of
          no_config ->
              ok;
          ConfigList ->
              _ = [application:set_env(Application, Key, Val)
                    || {Application, Items} <- ConfigList,
                       {Key, Val} <- Items],
              ok
      end.
  
  maybe_boot_apps(State) ->
      case rebar_state:get(State, shell_apps, undefined) of
          undefined ->
              ok;
          Apps ->
              ?WARN("The rebar3 shell is a development tool; to deploy "
                    "applications in production, consider using releases "
                    "(http://www.rebar3.org/v3.0/docs/releases)", []),
              Res = [application:ensure_all_started(App) || App <- Apps],
              _ = [?INFO("Booted ~p", [App])
                   || {ok, Booted} <- Res,
                      App <- Booted],
              _ = [?ERROR("Failed to boot ~p for reason ~p", [App, Reason])
                   || {error, {App, Reason}} <- Res],
              ok
      end.
  
  remove_error_handler(0) ->
      ?WARN("Unable to remove simple error_logger handler", []);
  