Comment masquer la sortie du terminal lors de l'exécution d'une commande?

62

Lorsque je lance certains programmes à partir de la ligne de commande, tels qu'éclipse et la visionneuse de documents dans 11.10, il génère une charge d'informations qui semble sans importance.

De plus, lorsqu'ils sont exécutés en arrière-plan, ils continuent parfois de produire une sortie vers le terminal sur lequel je travaille actuellement, ce qui est irritant.

Je voudrais juste qu'ils lancent et gardent les éléments d'arrière-plan à l'arrière-plan. Mon raisonnement est que si vous lancez ces programmes via l'interface graphique (par exemple, en double-cliquant sur une icône), ces messages ne me sont jamais montrés, je n'en ai donc pas besoin dans la ligne de commande.

Anake
la source

Réponses:

81

Si vous pouvez éviter d'écrire des choses dans la console, cela dépend de la manière dont la sortie du programme est créée. S'il est diffusé en sortie standard, il suffit alors de le faire

$ eclipse >/dev/null

et aucune sortie ne doit être faite.

Pour supprimer également les messages d'erreur:

$ eclipse >/dev/null 2>&1

Ou tout simplement:

$ eclipse &>/dev/null

Mais s’ils le font différemment, il peut être difficile d’empêcher l’écriture dans la console.

si possible, utilisez la solution donnée par MuffinStateWide

Misère
la source
2
Je voudrais peut-être que ça eclipse 2&>1 >/dev/nullsoit éliminé stderr. La redirection par défaut seulement stdout. Et il n'y a pas de manière "différente" de le faire, si vous purgez stdout et stderr dans le bas, il n'y aura pas de sortie.
TC1
@ TC1 En principe, un programme pourrait rouvrir / dev / tty et y imprimer le résultat. En pratique, les programmes graphiques ne le feront pas.
Random832
@ Random832 Eh bien, en principe, je suggèrerais de redistribuer ce lien vers / dev / dsp ou aplay pour obtenir un supplément de lulz ... :) moins écrire un email plutôt impoli au gars qui a fait ça.
TC1
5
@ TC1 "2> & 1> / dev / null" redirigera stdout vers le compartiment des bits, mais stderr ne sera pas redirigé. Vous devez inverser l'ordre et faire: "> / dev / null 2> & 1"
William Pursell
9
vous pouvez aussi le faire: eclipse &> /dev/null. Cela attrape à la fois stdin et stderr au point de redirection (dans bash)
warren le
12

Vous pouvez créer une fonction bash qui alias un nom de commande et ajouter des fonctionnalités supplémentaires pour réaliser ce que vous demandez.

Par exemple, supposons que vous souhaitiez lancer gvim(un éditeur de texte graphique) à partir de la ligne de commande.

vous pourriez écrire une fonction comme celle-ci:

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

(ajoutez cette fonction à votre fichier .bashrcou .bash_aliaseselle sera toujours chargée)

Explication:

  • cela aliasera la gvimcommande avec une fonction bash également nommée gvim(ainsi, lorsque vous gvimtaperez à l’invite bash, elle appellera votre gvimfonction plutôt que d’exécuter la gvimcommande réelle . Votre fonction appellera alors la gvimcommande réelle (et acceptera ses arguments habituels), avec quelques fonctionnalités ajoutées:

    • redirige stdout et stderr vers /dev/null(supprime la sortie vers le terminal)
    • utilise &pour exécuter la commande en arrière-plan (pour que votre shell ne soit pas bloqué)
    • utilise disownpour supprimer le travail en arrière-plan du shell (afin qu'il n'apparaisse pas dans la liste des travaux actifs)
    • utilise nohuppour détacher le processus du terminal (vous pouvez donc mettre fin à votre session shell ou fermer votre terminal sans tuer le processus)
Corey Goldberg
la source
Par ailleurs, je pense que c'est une solution plus complète que la réponse acceptée de @Misery
Corey Goldberg le
6

essayez d’ajouter --help en tant que commutateur de commande et recherchez «calme», ce qui devrait supprimer la sortie ou simplement être lancé à partir de l’interface graphique. et lancer avec le commutateur ou trouver un moyen de le supprimer via un script

Personnellement, je lance de Cli pour obtenir cette sortie si im ne suis pas sûr que ce est possible pour toutes les applications GUI.

MuffinStateWide
la source