diff options
Diffstat (limited to 'src/core/execute.c')
-rw-r--r-- | src/core/execute.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index 6a7ad66a21..10f73ee9b5 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -732,6 +732,12 @@ static int ask_for_confirmation(const char *vc, Unit *u, const char *cmdline) { return CONFIRM_EXECUTE; } + /* confirm_spawn might have been disabled while we were sleeping. */ + if (manager_is_confirm_spawn_disabled(u->manager)) { + r = 1; + goto restore_stdio; + } + e = ellipsize(cmdline, 60, 100); if (!e) { log_oom(); @@ -740,7 +746,7 @@ static int ask_for_confirmation(const char *vc, Unit *u, const char *cmdline) { } for (;;) { - r = ask_char(&c, "yfshiDj", "Execute %s? [y, f, s – h for help] ", e); + r = ask_char(&c, "yfshiDjc", "Execute %s? [y, f, s – h for help] ", e); if (r < 0) { write_confirm_error_fd(r, STDOUT_FILENO); r = CONFIRM_EXECUTE; @@ -748,6 +754,11 @@ static int ask_for_confirmation(const char *vc, Unit *u, const char *cmdline) { } switch (c) { + case 'c': + printf("Resuming normal execution.\n"); + manager_disable_confirm_spawn(); + r = 1; + break; case 'D': unit_dump(u, stdout, " "); continue; /* ask again */ @@ -756,7 +767,8 @@ static int ask_for_confirmation(const char *vc, Unit *u, const char *cmdline) { r = CONFIRM_PRETEND_FAILURE; break; case 'h': - printf(" D - dump, show the state of the unit\n" + printf(" c - continue, proceed without asking anymore\n" + " D - dump, show the state of the unit\n" " f - fail, don't execute the command and pretend it failed\n" " h - help\n" " i - info, show a short summary of the unit\n" @@ -2373,7 +2385,7 @@ static int exec_child( exec_context_tty_reset(context, params); - if (params->confirm_spawn) { + if (!manager_is_confirm_spawn_disabled(unit->manager)) { const char *vc = params->confirm_spawn; _cleanup_free_ char *cmdline = NULL; |