【问题标题】:how to store result of tail command in variable?如何将tail命令的结果存储在变量中?
【发布时间】:2016-07-06 10:34:09
【问题描述】:

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

脚本监视文件夹中的新图像上传并对其进行裁剪。

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

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

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

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

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

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

【问题讨论】:

    标签: linux shell tail


    【解决方案1】:

    由于tail -f 不会终止,因此您不想将其输出捕获到变量中。但是既然你无论如何都在循环中调用它,所以像这样一遍又一遍地调用它:

    OUT=`tail "$path"`
    

    或者使用现代语法:

    OUT=$(tail "$path")
    

    【讨论】:

    • 如果你给我一个关于我的想法是对还是错的建议,我真的很感激。还是我需要改进?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2013-11-25
    • 2018-06-27
    • 2022-10-19
    • 2011-04-20
    • 2013-01-12
    • 2011-02-13
    相关资源
    最近更新 更多