in

Comment exécuter une commande en arrière-plan sans sortie, sauf en cas d’erreur?

Si vous êtes une personne occupée, la dernière chose dont vous avez besoin est d’être dérangé par une énorme quantité de notifications «  inutiles  », alors comment calmer les choses? Le post de questions-réponses des super-utilisateurs d’aujourd’hui contient d’excellentes réponses pour aider un lecteur à réduire la quantité de sortie.

La question

Le lecteur SuperUser Xster veut savoir comment exécuter une commande en arrière-plan sans sortie sauf en cas d’erreur:

Comment supprimer la sortie d’une commande, mais l’afficher si la sortie de la commande code une erreur?

Comment faire exécuter une commande en arrière-plan sans sortie, sauf en cas d’erreur?

La réponse

Les contributeurs SuperUser Bob et Maximillian Laumeister ont la réponse pour nous. Tout d’abord, Bob:

Malheureusement, l’hypothèse qui n’est utilisée que pour la sortie d’erreur n’est pas toujours correcte. Au contraire, il est souvent utilisé pour toutes les sorties et diagnostics interactifs (c’est-à-dire les sorties destinées à être lues par l’utilisateur dans une invite interactive).(1) et sont des exemples bien connus.

Certaines commandes fourniront un indicateur (c’est-à-dire ou) pour supprimer la sortie sans erreur. Lisez leurs pages de manuel pour voir s’il en existe une.

Une autre convention qui tient plus souvent est la code de sortie, un programme renvoie un code de sortie à sa sortie. Typiquement(2), un code de sortie indique le succès et tout autre code de sortie indique une erreur.

Avec, vous pouvez obtenir le code de sortie de la dernière commande à partir de la variable. Dans, utilisez la variable. Vous pouvez diriger vers un fichier temporaire et ne l’imprimer qu’en cas d’erreur. Par example ():

Vous pouvez également utiliser certains raccourcis si vous ne chaînez pas les commandes:

Ou alors:

Vous pouvez également diriger vers le même tampon en utilisant.

(Noter: Je ne sais pas vraiment, donc j’adapte le concept à ce que je peux trouver dans sa documentation. La syntaxe peut être légèrement erronée. Vous pouvez également utiliser pour générer un fichier temporaire unique. Exécutez-le et enregistrez le nom du fichier dans une variable.)

Si vous avez besoin d’exécuter le tout en arrière-plan d’un shell que vous utilisez également de manière interactive en même temps, vous feriez mieux d’écrire un script pour gérer le masquage de la sortie et d’exécuter ce script en arrière-plan avec le techniques standard (). Heck, vous pouvez mettre quelque chose comme la fonction suivante dans:

Appeler avec (où la fin le fait fonctionner en arrière-plan)

Notez que cela avalera le code de sortie d’origine et videra à la fois et en cas d’échec. Vous pouvez le personnaliser selon vos besoins.

(1) Il n’y a aucune garantie que la sortie d’erreur n’apparaîtra pas, certains programmes y videront toute la sortie!

(2) Malheureusement, ce n’est toujours pas toujours le cas. Le code de sortie est entièrement contrôlé par le programme et certains indiqueront des conditions de succès avec des sorties non nulles. Encore une fois, consultez le manuel.

Suivi de la réponse de Maximillian Laumeister:

Les utilitaires Unix envoient des messages généraux à, et des messages d’erreur à, donc si nous ne voulons voir que les messages d’erreur, alors il suffira de supprimer pour ne recevoir que la sortie vers la console.

La manière de faire ceci (dans les deux et) est d’ajouter à la commande. Cela conduit au néant, mais (avec vos messages d’erreur) parvient toujours à la console.

Donc par exemple:

La commande n’imprime rien, car la sortie normale est supprimée et rien n’a été écrit.

La commande imprime un message d’erreur, car écrit son message d’erreur dans.

Avez-vous quelque chose à ajouter à l’explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d’autres utilisateurs de Stack Exchange férus de technologie? Consultez le fil de discussion complet ici.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment rétrograder des packages sur Ubuntu

Comment rétrograder des packages sur Ubuntu

Comment redémarrer un smartphone ou une tablette Android

Comment redémarrer un smartphone ou une tablette Android