I've never used Rust, but looking at the code, and reading
https://doc.rust-lang.org/std/process/struct.Command.html , is std::process:Command just farming out to bash? I ask, because the examples don't specify a full path, so that implies something else is doing the PATH search, like bash. Because of this, and the semantics, it looks like it's equivalent to a system() function in other languages.
If you really want job control, a path, environmental variables, and all the things that make a shell a shell, you have to be using exec() or execvp() https://doc.rust-lang.org/std/process/struct.Command.html#me... . Otherwise all you've done is wrap an existing shell that does all the work for you, and that was an immediate fail when we had to a make a shell in my undergrad systems course.
An easy check is the use the command "echo $SHELL". If that spits out anything besides literally "$SHELL", you're farming out.
All that said, Rust's exec() is listed a unix specific, so if you're on Windows, I guess you're stuck.