+ Done ... part of your output seems to come from Bash's job control. You usually get it when a command that you have started in background terminates, like this:
$ sleep 1 &
+ Done sleep 1
One solution to suppress these job control outputs is to launch the background command in a subshell, by enclosing it in parentheses:
$ ( sleep 1 &)
I can't tell whether this is appropriate in your situation, because you haven't shown your actual commands yet and this approach comes with a few disadvantages:
The job can't be controlled any more (e.g.
fg commands), but as it runs from a startup script, I assume that wouldn't be intended anyway.
If the command were modifying its environment (e.g. setting variables or changing the working directory), that would only affect the subshell then and no longer the rest of the script.
Another way is to make the shell forget about the job after it started using
$ sleep 1 & disown
That way however, it will also no longer terminate when the shell exits, so it might keep running past the user logout, if I understood this right (correct me if not).
Sources and further reading: