Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running bash commands in the background without printing job and process ids

To run a process in the background in bash is fairly easy.

$ echo "Hello I'm a background task" & [1] 2076 Hello I'm a background task [1]+  Done                    echo "Hello I'm a background task" 

However the output is verbose. On the first line is printed the job id and process id of the background task, then we have the output of the command, finally we have the job id, its status and the command which triggered the job.

Is there a way to suppress the output of running a background task such that the output looks exactly as it would without the ampersand at the end? I.e:

$ echo "Hello I'm a background task" & Hello I'm a background task 

The reason I ask is that I want to run a background process as part of a tab-completion command so the output of that command must be uninterrupted to make any sense.

like image 609
Alex Spurling Avatar asked Oct 07 '11 12:10

Alex Spurling


2 Answers

Not related to completion, but you could supress that output by putting the call in a subshell:

(echo "Hello I'm a background task" &) 
like image 124
Dimitre Radoulov Avatar answered Sep 30 '22 06:09

Dimitre Radoulov


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.

like image 36
Tyzoid Avatar answered Sep 30 '22 07:09

Tyzoid