如何在变量中存储tail命令的结果?

时间:2016-07-06 10:34:10

标签: linux shell tail

我正在开发MEAN堆栈中的应用程序。我想创建一个图像大小调整脚本&当新图像上传到服务器时,裁剪为后台进程。

脚本在文件夹中监视新图像上传并裁剪它。

我更喜欢将Linux shell脚本作为守护进程。

我使用了以下想法来完成任务。     - 在photolog.txt文件中写入服务器上的新图像上传,我可以逐行抓取图像。     - 我在watch.sh shell脚本文件中读到了photolog.txt。     - 它逐行迭代,直到达到EOL。     - 再次新文件到达它将附加到EOL。     - 我设法通过tail命令获取更新文件,并在命令行中显示最新的添加文件。这个代码很有魅力。

现在我成功获取了服务器上新添加文件的图像列表。但主要的问题是我无法在变量中存储tail命令的输出,并且它必须对我来说因为我得到的任何输出都是文件名的完整路径,它将在imagemagick crop命令中使用。

Imagemagick中心裁剪,缩放图像。

  

转换-define 文件类型:size = widthxheight original_filename -thumbnail 120x120 ^ -gravity center -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

我成功获取命令行输出,但我无法在变量中存储值,以便下次使用imagemagick图像处理命令。

或建议我以其他方式连续监控文件夹以获取新添加的文件列表。

1 个答案:

答案 0 :(得分:6)

由于tail -f未终止,因此您不希望在变量中捕获其输出。但是,既然你无论如何都要在循环中调用它,那就一遍又一遍地调用它:

OUT=`tail "$path"`

或使用现代语法:

OUT=$(tail "$path")