phhsnews.com


phhsnews.com / Comment exécuter une commande en arrière-plan sans sortie à moins d'une erreur?

Comment exécuter une commande en arrière-plan sans sortie à moins d'une erreur?


Si vous êtes une personne occupée, alors la dernière chose dont vous avez besoin est d'être dérangé par un énorme quantité de notifications «inutiles», alors comment calmer les choses?

La session de questions-réponses d'aujourd'hui nous est offerte par SuperUser, une subdivision de Stack Exchange, un regroupement communautaire de sites Web de questions et réponses.

La question

Lecteur SuperUser Xster veut savoir comment exécuter une commande en arrière-plan sans sortie à moins d'une erreur:

Comment supprimer la sortie d'une commande, mais l'afficher si les codes de sortie de la commande une erreur?

Comment obtenez-vous une commande pour exécuter en arrière-plan sans sortie à moins qu'il y ait une erreur?

Les contributeurs de SuperUser de réponse

Bob et Maximillian Laumeister ont la réponse pour nous. Tout d'abord, Bob:

Malheureusement, l'hypothèse que stderr est seulement utilisée pour la sortie d'erreur n'est pas toujours correcte. Plutôt, stderr est souvent utilisé pour toutes les sorties et tous les diagnostics interactifs (c'est-à-dire la sortie destinée à être lue dans une invite interactive). (1) wget et dd sont des exemples bien connus

Certaines commandes fourniront un drapeau (ie -quiet ou -silent ) pour supprimer la sortie sans erreur. Lisez leurs pages de manuel pour voir si elles existent.

Une autre convention qui tient le plus souvent le code de sortie , un programme renvoie un code de sortie quand il se termine. Typiquement (2) , un code de sortie 0 indique un succès, et tout autre code de sortie indique une erreur.

Avec bash , vous pouvez obtenir le code de sortie de la dernière commande de la variable $? . Dans poisson , utilisez la variable $ status . Vous pouvez rediriger stderr vers un fichier temporaire et ne l'imprimer qu'en cas d'erreur. Par exemple ( poisson ):

Vous pouvez également utiliser des raccourcis si vous n'êtes pas en train de chaîner des commandes:

Ou:

Vous pouvez également rediriger stdout vers le même tampon en utilisant 2> & 1> / tmp / outputbuffer .

( Note: Je ne connais pas vraiment poisson , donc j'adapte le concept à ce que je peux trouver dans sa documentation.La syntaxe peut être légèrement fausse.En outre, vous pouvez utiliser mktemp pour générer un fichier temporaire unique.Exécutez-le et enregistrez le nom du fichier dans une variable.

Si vous devez exécuter le tout en arrière-plan d'un shell que vous utilisez simultanément de manière interactive, alors il vaut mieux écrire un script pour gérer la sortie-masquage et exécuter ce script en arrière-plan avec les techniques standard ( poisson ). Heck, vous pouvez mettre quelque chose comme la fonction suivante dans ~ / .config / fish / config.fish :

Appel avec run-silent somecommand & (où le trailing & l'exécute en arrière-plan)

Notez que cela va avaler le code de sortie d'origine, et videra stdout et stderr dans le cas d'un échec. Vous pouvez le personnaliser si nécessaire.

(1) Il n'y a aucune garantie que la sortie d'erreur n'apparaîtra pas sur stdout , certains programmes y déverseront toutes les sorties!

(2) Malheureusement, ce n'est toujours pas 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 à stdout , et les messages d'erreur à stderr , si seulement Si vous voulez voir les messages d'erreur, alors il suffira de supprimer stdout pour que seulement stderr soit envoyé à la console.

La façon de procéder (dans bash et fish ) est d'ajouter / dev / null à la commande. Ceci stdout dans le néant, mais stderr (avec vos messages d'erreur) arrive toujours à la console.

Donc par exemple:

La commande echo 1 > / dev / null n'affiche rien, car la normale La sortie stdout est supprimée et rien n'a été écrit dans stderr .

La commande man doesnotexist> / dev / null affiche un message d'erreur, car man écrit son message d'erreur à stderr .


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


Comment sauvegarder et restaurer le registre Windows

Comment sauvegarder et restaurer le registre Windows

Chaque fois que vous apportez une modification au registre Windows, tout article responsable vous dira probablement de sauvegarder le registre en premier. Mais comment fais-tu cela? Vous ne pouvez pas simplement sauvegarder et restaurer le registre comme n'importe quel autre fichier - une grande partie ne peut pas être modifiée à la main, et les fichiers eux-mêmes ne peuvent pas être remplacés ou copiés plus, au moins pas pendant que Windows est en cours d'exécution.

(how-to)

Comment utiliser VLOOKUP dans Excel

Comment utiliser VLOOKUP dans Excel

VLOOKUP est l'une des fonctions les plus utiles d'Excel, et c'est aussi l'une des moins bien comprises. Dans cet article, nous démystifions VLOOKUP à l'aide d'un exemple concret. Nous allons créer un modèle de facture utilisable pour une société fictive. VLOOKUP est une fonction Excel . Cet article supposera que le lecteur a déjà une compréhension passagère des fonctions Excel, et peut utiliser des fonctions de base telles que SUM, AVERAGE et AUJOURD'HUI.

(how-to)