Question

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 une fenêtre "echo off".

Était-ce utile?

La solution

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

scriptname >/dev/null

et si vous souhaitez également que des messages d'erreur y soient envoyés, utilisez l'un des (le premier risque de 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 réel, 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

Autres conseils

Quelque chose comme

script > /dev/null 2>&1

Ceci empêchera la sortie standard des erreurs et , en les redirigeant toutes les deux vers / dev / null .

Essayez

: $(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 variable comme une commande, le code retour de la commande en cours est respecté.

Remarque: L'attribution associée au mot clé typeset ou declare est considérée comme une commande. Par conséquent, le code de retour évalué dans le cas où l'assignation est elle-même. et non la commande exécutée dans le sous-shell:

$ 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 La documentation Linux Projet :

  

3.6 Exemple: fichier stderr et stdout 2

     

Ceci placera chaque sortie d'un programme dans un fichier. Cela convient parfois pour les 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 redirection simple:

/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 un résultat:

some_code 2>>/dev/null

Sinon, vous pouvez aussi essayer

some_code >>/dev/null
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top