80

When I launch certain programs from the command line like eclipse and document viewer in 11.10 it spews a load of information that seems inconsequential.

Also when they are run in the background they sometimes continue to produce output to the terminal which I am currently working on, which is irritating.

I would like them just launch and keep the background stuff in the background. My reasoning is that if you launch these programs through the GUI (eg double clicking on an icon) these messages are never shown to me, so I don't need them in the command line.

Braiam
  • 67,791
  • 32
  • 179
  • 269
Anake
  • 1,905

3 Answers3

109

If you can avoid writing stuff in the console, it depends on how output from the program is created. If it is streamed to standard output, then it is just enough to do

$ eclipse >/dev/null

and no output should be made.

To suppress error messages as well:

$ eclipse >/dev/null 2>&1

Or in bash, simply:

$ eclipse &>/dev/null

But if they do it somehow differently then it might be a problem to stop it from writing in the console.

if possible use the solution given by MuffinStateWide

Praveen
  • 273
  • 2
  • 12
Misery
  • 3,484
  • 2
    Might wanna make that eclipse 2&>1 >/dev/null to get rid of stderr. The default only redirects stdout. And there is no "different" way to do it, if you purge both stdout and stderr into the nether, there'll be no output. – TC1 Jan 25 '12 at 14:32
  • @TC1 In principle, a program could reopen /dev/tty and print the output there. In practice, GUI programs won't do that. – Random832 Jan 25 '12 at 14:58
  • @Random832 Well in principle, I'd suggest piping that stderr to /dev/dsp or aplay for extra lulz... :) But you're right, in theory it could be done, in practice -- I'd probably at least write a rather impolite email to the guy who did that. – TC1 Jan 25 '12 at 15:52
  • 5
    @TC1 "2>&1 >/dev/null" will redirect stdout to the bit bucket, but stderr will not be redirected. You need to reverse the order and do: ">/dev/null 2>&1" – William Pursell Jan 25 '12 at 16:56
  • 9
    you can also do just: eclipse &> /dev/null. That catches both stdin and stderr to the redirect point (in bash) – warren Jan 25 '12 at 19:29
15

You can create a bash function that will alias a command name and add some extra functionality to achieve what you are asking for.

For example: let's say you want to launch gvim (a gui text editor) from the command line.

you could write a function like this:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(add this function to your .bashrc or .bash_aliases file so it is always loaded)

Explanation:

  • this will alias the gvim command with a bash function also named gvim (so when you type gvim at a bash prompt, it will call your gvim function, rather than executing the real gvim command. Your function then calls the real gvim command (and accepts its regular args), with some added features:

    • redirects stdout and stderr to /dev/null (suppresses output to the terminal)
    • uses & to run the command in the background (so your shell isn't blocked)
    • uses disown to remove the background job from the shell (so it won't appear in the list of active jobs)
    • uses nohup to detach the process from the terminal (so you can end your shell session or close your terminal without killing the process)
Corey Goldberg
  • 3,046
  • 3
  • 19
  • 21
6

try adding --help as a command switch and look for "quiet" this should suppress the output , or just launch from GUI. and launch with the switch or find a way to suppress it via script

personally i launch from cli to get that output so im not sure its possible for all GUI apps.