2016-07-06 1 views
2

Je développe une application dans la pile MEAN. Je veux créer un script de redimensionnement de l'image & en tant que processus d'arrière-plan lorsque la nouvelle image est chargée sur le serveur. Script regarde une nouvelle image dans un dossier et la recadre. Je préfère la façon de script shell Linux comme daemon. J'ai utilisé l'idée suivante pour des tâches accomplies. - Nouvelle image téléchargée sur le serveur dans le fichier photolog.txt, où je peux saisir les images ligne par ligne. - J'ai lu photolog.txt dans le fichier de script de shell watch.sh. - Il itéte ligne par ligne, jusqu'à ce qu'il atteigne l'EOL. - À nouveau, le nouveau fichier sera ajouté à EOL. - Je parviens à obtenir la mise à jour de la commande file by tail et à obtenir le dernier affichage de l'ajout de fichier en ligne de commande. Jusqu'à ce code cela fonctionne charme.comment stocker le résultat de la commande de queue dans la variable?

Maintenant, je suis en train de récupérer la liste d'images du fichier nouvellement ajouté sur le serveur. mais le problème principal est que je n'arrive pas à stocker la sortie de la commande tail dans la variable, et il doit me le faire car quelle que soit la sortie je l'obtiens est le chemin complet du nom de fichier et utilisera dans la commande imagemagick crop.

Imagemagick recadrer le centre avec échelle et image.

convertir -define fichier de type: size = largeurxhauteuroriginal_filename -thumbnail 120x120^centre -gravity -extent 100x100 resize_filename

watch.sh

#!/bin/bash 
path="/var/www/html/AppBite/trunk/photolog.txt" 
cat $path | \ 

until false 
do 
    # If file exists 
    if [[ -f "$path" ]] 
    then  
     while IFS= read -r photo 
     do 
      imageFormat=`identify $photo | awk '{print $2}'` 
      imageScale=`identify $photo | awk '{print $3}'` 
      echo "$photo $imageFormat $imageScale" 
     done 
    fi 
    # Continous monitor file changes via commandline 
    tail -f $path 
done 

Je réussis à récupérer la sortie de la ligne de commande, mais je ne suis pas en mesure de stocker la valeur dans la variable, pour la prochaine utilisation de la commande de traitement d'image imagemagick.

ou de me suggérer un autre moyen de continuer le dossier de surveillance pour obtenir la nouvelle liste de fichiers ajoutée.

Répondre

4

Puisque tail -f ne se termine pas, vous ne voulez pas capturer sa sortie dans une variable. Mais puisque vous l'appelez dans une boucle de toute façon, appeler encore et comme celui-ci:

OUT=`tail "$path"` 

Ou en utilisant la syntaxe moderne:

OUT=$(tail "$path") 
+0

Je suis vraiment reconnaissant si vous me donnez une suggestion au sujet de cette pensée que si mon idée est fausse ou non? ou je dois améliorer cela? –