1 votes

Exécuter une autre commande s'il y a une entrée sur l'entrée standard

Comment puis-je lancer une autre commande s'il y a une entrée sur l'entrée standard ?

couramment utilisé dans des situations comme celle-ci :

une commande sans sortie normale | ifinput mail -s 'some output' me

3voto

David Points 344

Une petite astuce avec read :

$ echo 1 | { read -t 0 -N 0 && cat ; } 
1
$ { read -t 0 -N 0 && cat ; } 
$

2voto

Michael Points 86

La solution la plus simple serait d'utiliser un fichier (si vous osez !). Le site -s signifie "le fichier n'a pas une taille nulle". Le site &> Les redirections incluent également les erreurs (ce qui signifie que stdout et stderr seront envoyés).

OUTFILE=/tmp/command.out
some command &> $OUTFILE
[ -s "$OUTFILE" ] && mail -s "subject here" email@example.com < "$OUTFILE"

Edit : le commentaire ci-dessous de glenn jackman contient même une meilleure solution.

1voto

digitaljoel Points 101

Vous pouvez également créer un Shell Shell. Ce Shell pourrait d'abord appeler une commande qui redirige la sortie vers un fichier et ensuite appeler la commande mail depuis le Shell pour l'envoyer, ce qui est essentiellement ce que SamKrieg fait sans avoir besoin de créer un Shell Shell. Une raison pour le Shell peut dépendre de si vous voulez exécuter cette commande comme une tâche cron ou quelque chose comme ça.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X