Also remember to really preserve the environment.
Some indentation changes as well.
Remove some unnecessary local values, simplify the exec-call at the end (we don't need the separate array) and print clearer and more consistent error-messages.
No shadow support atm.