获取shell输出的最后一行作为变量

gio*_*pas 16 shell tail exiftool qnap

我正在使用exiftool的shell脚本自动更改某个文件夹中包含的图片上的一些exif标签,我想在作业完成时使用输出在我的NAS(QNAP)上获取通知.

一切正常,但是 - 当通知系统截断消息时 - 我希望只收到我需要的信息,即shell输出的最后一行,例如以下内容:

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
Run Code Online (Sandbox Code Playgroud)

问题是目前我只收到以下通知:

在相机上完成Exiftool cronjob:4512文件失败

我想要的是:

在相机上完成Exiftool cronjob:更新了177个图像文件

该脚本如下:

#!/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
Run Code Online (Sandbox Code Playgroud)

为此,我使用|使用$ OUTPUT变量 尾巴-1,但可能我犯了一些基本错误,我得到的结果如下:

在相机上完成Exiftool cronjob:4512文件条件失败| 尾巴-1

如何以正确的方式做到这一点?谢谢

use*_*502 32

把尾巴放在捕获的parens里面.

OUTPUT=$(exif ... | tail -1)
Run Code Online (Sandbox Code Playgroud)

你这里不需要双引号.我猜你试过了

OUTPUT="$(exif ...) | tail -1"
Run Code Online (Sandbox Code Playgroud)


Ian*_*.CO 16

可能是现在要回答的旧帖子,但尝试使用-n标志(请参阅tail --help)并使用ticks包装命令输出.

OUTPUT=`exif ... | tail -n 1`
Run Code Online (Sandbox Code Playgroud)

(user464502的答案对我不起作用,因为tail命令无法识别参数"-1")

  • 当时,我正在反映OP的语法.'-n'是Posix,是首选.现代风格是$(...)而不是反叛,尽管两者都有效. (3认同)