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".
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
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
.
Essayer
: $(yourcommand)
:
est l'abréviation de "ne rien faire".
$()
n'est que votre commande.
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
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
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