diff --git a/Userland/Shell/Shell.cpp b/Userland/Shell/Shell.cpp index ef4979a888..0b31ed99f6 100644 --- a/Userland/Shell/Shell.cpp +++ b/Userland/Shell/Shell.cpp @@ -568,12 +568,9 @@ int Shell::run_command(StringView cmd, Optional source_position_ } tcgetattr(0, &termios); - tcsetattr(0, TCSANOW, &default_termios); (void)command->run(*this); - tcsetattr(0, TCSANOW, &termios); - if (!has_error(ShellError::None)) { possibly_print_error(); take_error(); @@ -743,7 +740,6 @@ RefPtr Shell::run_command(const AST::Command& command) if (child == 0) { close(sync_pipe[1]); - m_is_subshell = true; m_pid = getpid(); Core::EventLoop::notify_forked(Core::EventLoop::ForkEvent::Child); TemporaryChange signal_handler_install { m_should_reinstall_signal_handlers, true }; @@ -769,6 +765,8 @@ RefPtr Shell::run_command(const AST::Command& command) if (!m_is_subshell && command.should_wait) tcsetattr(0, TCSANOW, &default_termios); + m_is_subshell = true; + if (command.should_immediately_execute_next) { VERIFY(command.argv.is_empty());