Running bash commands in the background without printing job and process ids
Building off of @shellter's answer, this worked for me:
tyler@Tyler-Linux:~$ { echo "Hello I'm a background task" & disown; } 2>/dev/null; sleep .1;
Hello I'm a background task
tyler@Tyler-Linux:~$
I don't know the reasoning behind this, but I remembered from an old post that disown prevents bash from outputting the process ids.
Based on this answer, I came up with the more concise and correct:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>/dev/null
disown &>/dev/null # Prevent whine if job has already completed
}
silent_background date
Not related to completion, but you could supress that output by putting the call in a subshell:
(echo "Hello I'm a background task" &)
In some newer versions of bash and in ksh93 you can surround it with a sub-shell or process group (i.e. { ... }
).
/home/shellter $ { echo "Hello I'm a background task" & } 2>/dev/null
Hello I'm a background task
/home/shellter $