diff --git a/src/run/run.c b/src/run/run.c index 741f7b279f..627a6b11da 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -593,10 +593,6 @@ static int parse_argv(int argc, char *argv[]) { return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--remain-after-exit and --service-type= are not supported in --scope mode."); - if (arg_scope && arg_working_directory) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "--working-directory is not supported in --scope mode."); - if (arg_stdio != ARG_STDIO_NONE && (with_trigger || arg_scope)) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--pty/--pipe is not compatible in timer or --scope mode."); @@ -1533,6 +1529,9 @@ static int start_transient_scope(sd_bus *bus) { return log_error_errno(errno, "Failed to change UID to " UID_FMT ": %m", uid); } + if (arg_working_directory && chdir(arg_working_directory) < 0) + return log_error_errno(errno, "Failed to change directory to '%s': %m", arg_working_directory); + env = strv_env_merge(environ, user_env, arg_environment); if (!env) return log_oom();