web-dev-qa-db-fra.com

Comment supprimer toutes les sorties d'une commande en utilisant Bash?

J'ai un script bash qui exécute un programme avec des paramètres. Ce programme affiche un statut (faire ceci, faire cela ...). Il n'y a aucune option pour que ce programme soit silencieux. Comment puis-je empêcher le script d'afficher quoi que ce soit?

Je cherche quelque chose comme Windows "echo off".

267
6bytes

Les éléments suivants envoient une sortie standard au périphérique null (compartiment à bits).

scriptname >/dev/null

et si vous souhaitez également que des messages d'erreur y soient envoyés, utilisez l'un des deux (le premier peut ne pas fonctionner dans tous les shells):

scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null

et, si vous souhaitez enregistrer les messages mais ne pas les voir, remplacez /dev/null par un fichier, tel que:

scriptname &>scriptname.out

Pour être complet, sous Windows cmd.exe (où "nul" est l'équivalent de "/ dev/null"), il s'agit de:

scriptname >nul 2>nul
475
andynormancx

Quelque chose comme

script > /dev/null 2>&1

Cela empêchera la sortie standard et sortie d'erreur, en les redirigeant toutes les deux vers /dev/null.

42
Diego Sevilla

Essayer

: $(yourcommand)

: est l'abréviation de "ne rien faire".

$() n'est que votre commande.

11
V0idSt4r

Une alternative qui peut convenir dans certaines situations consiste à affecter le résultat d'une commande à une variable:

$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1

Etant donné que Bash et les autres interpréteurs de ligne de commande POSIX ne considèrent pas les affectations de variables comme une commande, le code retour de la commande actuelle est respecté.

Remarque: L'attribution avec le mot clé typeset ou declare est considérée comme une commande. Le code retour évalué dans le cas où il s'agit de l'assignation elle-même et non de la commande exécutée dans le sous-programme. Coquille:

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
7
semente

Comme andynormancx post, utilisez ceci: (si vous travaillez dans un environnement Unix)

scriptname > /dev/null

ou vous pouvez utiliser ceci: (si vous travaillez dans un environnement Windows)

scriptname > nul

Regardez cet exemple dans projet de documentation Linux:

3.6 Echantillon: fichier stderr et stdout 2

Cela placera chaque sortie d'un programme dans un fichier. Cela convient parfois aux entrées cron si vous voulez qu'une commande passe en silence absolu.

     rm -f $(find / -name core) &> /dev/null 

Cela dit, vous pouvez utiliser cette simple redirection:

/path/to/command &>/dev/null
4
ivanleoncz

Dans votre script, vous pouvez ajouter ce qui suit aux lignes dont vous savez qu’elles vont générer une sortie:

some_code 2>>/dev/null

Ou bien tu peux aussi essayer

some_code >>/dev/null
1
Rohan Dsouza