From: Yu Watanabe Date: Mon, 11 Aug 2025 06:58:31 +0000 (+0900) Subject: machinectl: set TERM=dumb when running on a dumb terminal or with a pipe X-Git-Tag: v258-rc3~45^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cace9cf6f65422fbbc78c11515ceba56fd00f87a;p=thirdparty%2Fsystemd.git machinectl: set TERM=dumb when running on a dumb terminal or with a pipe Fixes #38527. --- diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 4e3138b2ff1..fd37bde874a 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -1400,18 +1400,25 @@ static int shell_machine(int argc, char *argv[], void *userdata) { return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Shell only supported on local machines."); - /* Pass $TERM & Co. to shell session, if not explicitly specified. */ - FOREACH_STRING(v, "TERM=", "COLORTERM=", "NO_COLOR=") { - if (strv_find_prefix(arg_setenv, v)) - continue; + if (terminal_is_dumb()) { + /* Set TERM=dumb if we are running on a dumb terminal or with a pipe. + * Otherwise, we will get unwanted OSC sequences. */ + if (!strv_find_prefix(arg_setenv, "TERM=")) + if (strv_extend(&arg_setenv, "TERM=dumb") < 0) + return log_oom(); + } else + /* Pass $TERM & Co. to shell session, if not explicitly specified. */ + FOREACH_STRING(v, "TERM=", "COLORTERM=", "NO_COLOR=") { + if (strv_find_prefix(arg_setenv, v)) + continue; - const char *t = strv_find_prefix(environ, v); - if (!t) - continue; + const char *t = strv_find_prefix(environ, v); + if (!t) + continue; - if (strv_extend(&arg_setenv, t) < 0) - return log_oom(); - } + if (strv_extend(&arg_setenv, t) < 0) + return log_oom(); + } (void) polkit_agent_open_if_enabled(arg_transport, arg_ask_password);