private bool DoRunJob()

in src/common/details/commands/runjob_command.cs [32:152]


        private bool DoRunJob()
        {
            CheckPath();

            var quiet = _values.GetOrDefault("x.quiet", false);

            var args = _values.GetOrEmpty("run.input.post.args").Replace(';', ' ');
            var preArgs = _values.GetOrEmpty("run.input.pre.args").Replace(';', ' ');

            var process = _values.GetOrEmpty("run.input.process");

            var command = _values.GetOrEmpty($"run.input.{Program.Name}.command");
            var commandArgs = _values.GetOrEmpty($"run.input.{Program.Name}.post.command.args").Replace(';', ' ');
            var preCommandArgs = _values.GetOrEmpty($"run.input.{Program.Name}.pre.command.args").Replace(';', ' ');

            var job = _values.GetOrEmpty($"run.input.{Program.Name}.job");
            var jobArgs = _values.GetOrEmpty($"run.input.{Program.Name}.post.job.args").Replace(';', ' ');
            var preJobArgs = _values.GetOrEmpty($"run.input.{Program.Name}.pre.job.args").Replace(';', ' ');

            var line = _values.GetOrEmpty("run.input.line");
            var lineArgs = _values.GetOrEmpty("run.input.post.line.args").Replace(';', ' ');
            var preLineArgs = _values.GetOrEmpty("run.input.pre.line.args").Replace(';', ' ');

            var script = _values.GetOrEmpty("run.input.script");
            var scriptArgs = _values.GetOrEmpty("run.input.post.script.args").Replace(';', ' ');
            var preScriptArgs = _values.GetOrEmpty("run.input.pre.script.args").Replace(';', ' ');

            var file = _values.GetOrEmpty("run.input.file");
            var fileArgs = _values.GetOrEmpty("run.input.post.file.args").Replace(';', ' ');
            var preFileArgs = _values.GetOrEmpty("run.input.pre.file.args").Replace(';', ' ');

            var item = _values.GetOrEmpty("run.input.item");
            var itemArgs = _values.GetOrEmpty("run.input.post.item.args").Replace(';', ' ');
            var preItemArgs = _values.GetOrEmpty("run.input.pre.item.args").Replace(';', ' ');

            var inputPath = _values.GetOrDefault("x.input.path", Directory.GetCurrentDirectory())!;

            var processOk = !string.IsNullOrEmpty(process);
            var commandOk = !string.IsNullOrEmpty(command);
            var scriptOk = !string.IsNullOrEmpty(script);
            var fileOk = !string.IsNullOrEmpty(file);
            var jobOk = !string.IsNullOrEmpty(job);

            var app = processOk && process == Program.Name;
            if (app && jobOk && !job.StartsWith("@")) job = $"@{job}";

            var startPath = UpdateJobStartPath(ref job, inputPath);

            if (!processOk && scriptOk) processOk = UpdateProcessIfFileNotExist(script, ref process);
            if (!processOk && commandOk) processOk = UpdateProcessIfFileNotExist(command, ref process);
            if (!processOk && fileOk) processOk = UpdateProcessIfFileNotExist(file, ref process);

            var cmd = processOk && process == "cmd";
            var bash = processOk && process == "bash";

            var start = "";
            var startArgs = "";

            if (app)
            {
                start = process;
                startArgs = $"{preCommandArgs} {command} {commandArgs}".Trim();
                startArgs = $"{startArgs} {preJobArgs} {job} {jobArgs}".Trim();
                startArgs = $"{startArgs} {preFileArgs} {file} {fileArgs}".Trim();
                startArgs = $"{startArgs} {preLineArgs} {line} {lineArgs}".Trim();
                startArgs = $"{startArgs} {preItemArgs} {item} {itemArgs}".Trim();
                startArgs = $"{preArgs} {startArgs} {args}".Trim();
            }
            else if (processOk)
            {
                start = process;
                startArgs = $"{preScriptArgs} {script} {scriptArgs}".Trim();
                startArgs = $"{startArgs} {preFileArgs} {file} {fileArgs}".Trim();
                startArgs = $"{startArgs} {preLineArgs} {line} {lineArgs}".Trim();
                startArgs = $"{startArgs} {preItemArgs} {item} {itemArgs}".Trim();
                startArgs = $"{preArgs} {startArgs} {args}".Trim();

                if (cmd && !startArgs.StartsWith("/c")) startArgs = $"/c {startArgs}";
                if (bash && !startArgs.StartsWith("-lic")) startArgs = $"-lic \"{startArgs}\"";
            }
            else if (scriptOk)
            {
                start = script;
                startArgs = $"{scriptArgs}".Trim();
                startArgs = $"{startArgs} {preFileArgs} {file} {fileArgs}".Trim();
                startArgs = $"{startArgs} {preLineArgs} {line} {lineArgs}".Trim();
                startArgs = $"{startArgs} {preItemArgs} {item} {itemArgs}".Trim();
                startArgs = $"{preArgs} {startArgs} {args}".Trim();
            }
            else if (fileOk)
            {
                start = file;
                startArgs = $"{fileArgs}".Trim();
                startArgs = $"{startArgs} {preLineArgs} {line} {lineArgs}".Trim();
                startArgs = $"{startArgs} {preItemArgs} {item} {itemArgs}".Trim();
                startArgs = $"{preArgs} {startArgs} {args}".Trim();
            }
            else if (quiet)
            {
                return true;
            }
            else
            {
                _values.AddThrowError(
                    "WARNING:", $"Missing arguments; requires one of process, command, script, file, or job!",
                        "",
                        "TRY:", $"{Program.Name} run --command COMMAND --args ARGS",
                                $"{Program.Name} run --script SCRIPT --args ARGS",
                                $"{Program.Name} run --job JOB",
                        "",
                        "SEE:", $"{Program.Name} help run");
            }

            var retries = _values.GetOrDefault("run.retries", 0);
            var timeout = _values.GetOrDefault("run.timeout", 86400000);
            var expected = _values.GetOrEmpty("run.output.expect.regex");
            var notExpected = _values.GetOrEmpty("run.output.not.expect.regex");
            var autoExpect = _values.GetOrDefault("run.output.auto.expect.regex", false);

            return DoRunJob(start.Trim(), startArgs.Trim(), startPath, expected, notExpected, autoExpect, timeout, retries);
        }