From: dongshengyuan <545258830@qq.com> Date: Mon, 13 Jul 2026 06:14:33 +0000 (+0800) Subject: run: reject JSON output with stdio forwarding X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ecf38b0e22ebe0c37a7fffcf3e77c6d9d7b48b9e;p=thirdparty%2Fsystemd.git run: reject JSON output with stdio forwarding Reproducer: sudo systemd-run --wait --pipe --json=short /bin/echo hi Before, systemd-run wrote its JSON metadata to stdout and then passed the command stdout through the same stream. The combined output was not valid machine-readable JSON, so reject the conflicting modes. Follow-up for fe5a6c47af675bc0020c545d86fb103492e1d77c --- diff --git a/src/run/run.c b/src/run/run.c index 5d95ee8a22a..6754b80bcf3 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -723,6 +723,10 @@ static int parse_argv(int argc, char *argv[]) { return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--pty-late is not compatible with --service-type=oneshot."); + if (sd_json_format_enabled(arg_json_format_flags) && arg_stdio != ARG_STDIO_NONE) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "--json= is not compatible with --pty/--pty-late/--pipe."); + if (arg_scope && with_trigger) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Path, socket or timer options are not supported in --scope mode."); diff --git a/test/units/TEST-74-AUX-UTILS.run.sh b/test/units/TEST-74-AUX-UTILS.run.sh index acd7bc5b6c9..a5c79ddb72e 100755 --- a/test/units/TEST-74-AUX-UTILS.run.sh +++ b/test/units/TEST-74-AUX-UTILS.run.sh @@ -256,6 +256,7 @@ systemd-run --wait --pty true systemd-run --wait --machine=.host --pty true systemd-run --json=short true | jq . >/dev/null systemd-run --json=pretty true | jq . >/dev/null +(! systemd-run --wait --pipe --json=short true) (! SHELL=/bin/false systemd-run --quiet --shell) (! systemd-run)