web-dev-qa-db-fra.com

Récupère la dernière ligne de sortie Shell en tant que variable

Je travaille sur un script Shell avec exiftool pour changer automatiquement certaines balises exif sur les images contenues dans un certain dossier et je voudrais utiliser la sortie pour obtenir une notification sur mon NAS (un QNAP) lorsque le travail est terminé.

Tout fonctionne déjà, mais - comme le système de notification tronque le message - je voudrais recevoir uniquement les informations dont j'ai besoin, c'est-à-dire la dernière ligne de la sortie Shell, qui est par exemple la suivante:

Warning: [minor] Entries in IFD0 were out of sequence. Fixed. - 2015-07-12 15.41.06.jpg                                                                             
 4512 files failed condition                                                      
  177 image files updated

Le problème est qu'actuellement je ne reçois que la notification suivante:

Cronjob Exiftool terminé sur l'appareil photo: condition de l'échec de 4512 fichiers

Ce que j'aimerais obtenir à la place, c'est:

Cronjob Exiftool terminé sur l'appareil photo: 177 fichiers image mis à jour

Le script est le suivant:

#!/bin/sh
# exiftool script for 2002 problem
dir="/share/Multimedia/Camera"
cd "$dir"
FOLDER="$(printf '%s\n' "${PWD##*/}")"
OUTPUT="$(exiftool -overwrite_original -r '-CreateDate<DateTimeOriginal' -if '$CreateDate eq "2002:12:08 12:00:00"' -if '$DateTimeOriginal ne $CreateDate' *.[Jj][Pp][Gg])"
/sbin/notice_log_tool -a "Exiftool cronjob completed on ${FOLDER}: ${OUTPUT}" --severity=5
exit 0

Pour ce faire, j'ai joué avec la variable $ OUTPUT en utilisant | tail -1, mais probablement je fais quelques erreurs de base et je reçois quelque chose comme:

Cronjob Exiftool terminé sur l'appareil photo: 4512 fichiers ont échoué condition | queue -1

Comment le faire de la bonne manière? Merci

16
giopas

Mettez la queue à l'intérieur des parens de capture.

OUTPUT=$(exif ... | tail -1)

Vous n'avez pas besoin des guillemets doubles ici. Je suppose que tu as essayé

OUTPUT="$(exif ...) | tail -1"
31
user464502

Probablement une ancienne publication à laquelle répondre maintenant, mais essayez d'utiliser l'indicateur -n (voir tail --help) et encapsulez la sortie de la commande à l'aide de ticks.

OUTPUT=`exif ... | tail -n 1`

(La réponse de user464502 n'a pas fonctionné pour moi car la commande tail ne reconnaît pas le paramètre "-1")

15
IanK.CO