diff --git a/lib/kernel/src/group.erl b/lib/kernel/src/group.erl index f122a0ec653c..146250bcd069 100644 --- a/lib/kernel/src/group.erl +++ b/lib/kernel/src/group.erl @@ -800,9 +800,13 @@ getopts(Data) -> true -> unicode; _ -> latin1 end}, - Terminal = get_terminal_state(Data#state.driver), - Tty = {terminal, maps:get(stdout, Terminal)}, - [Exp,Echo,LineHistory,Log,Bin,Uni,Tty|maps:to_list(Terminal)]. + case get_terminal_state(Data#state.driver) of + Terminal when is_map(Terminal) -> + Tty = {terminal, maps:get(stdout, Terminal)}, + [Exp,Echo,LineHistory,Log,Bin,Uni,Tty|maps:to_list(Terminal)]; + Error -> + Error + end. %% Convert error code to make it look as before err_func(io_lib, get_until, {_,F,_}) -> diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl index 5e7af7b43999..0ac830f12bdc 100644 --- a/lib/stdlib/src/shell.erl +++ b/lib/stdlib/src/shell.erl @@ -397,8 +397,11 @@ get_command(Prompt, Eval, Bs, RT, FT, Ds) -> Parse = fun() -> put('$ancestors', Ancestors), - PreviousHistory = proplists:get_value(line_history, io:getopts()), - [ok = io:setopts([{line_history, true}]) || PreviousHistory =/= undefined], + PreviousHistory = case io:getopts() of + {error,_} -> undefined; + Opts0 -> proplists:get_value(line_history, Opts0) + end, + _ = [io:setopts([{line_history, true}]) || PreviousHistory =/= undefined], Res = io:scan_erl_exprs(group_leader(), Prompt, {1,1}, [text,{reserved_word_fun,ResWordFun}]), _ = [io:setopts([{line_history, PreviousHistory}]) || PreviousHistory =/= undefined],