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

how to store result of tail command in variable?

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

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

我更喜欢 Linux shell 脚本作为守护进程的方式。

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

现在我成功的抓取了服务器上新增文件的图片列表。但主要问题是我无法将 tail 命令的输出存储在变量中,这对我来说是必须的,因为无论我得到什么输出,它都是文件名的完整路径,它将在 imagemagick crop 命令中使用。

Imagemagick 居中裁剪并缩放图像。

convert -define file-type: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 }'`
            imageScale=`identify $photo | awk '{print }'`
            echo "$photo $imageFormat $imageScale"
        done
    fi
    # Continous monitor file changes via commandline
    tail -f $path
done

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

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

由于 tail -f 不会终止,您不想在变量中捕获其输出。但是既然你在循环中调用它,就这样一遍又一遍地调用它:

OUT=`tail "$path"`

或使用现代语法:

OUT=$(tail "$path")