I think I'd rename the variables here — it doesn't make much sense for `run_line` to take a parameter called `multiline`, I think. Really it's a semicolon-delimited string, right? Maybe the terminology should be, you pass in a `command_spec_sequence`, and that gets split to a list of `command_spec`s or something?

(I can buy that using `_spec` to mean "thing along those lines" isn't the best pattern, but it seems plausible.)