Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取shell输出的最后一行作为变量_Shell_Tail_Exiftool_Qnap - Fatal编程技术网

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

获取shell输出的最后一行作为变量,shell,tail,exiftool,qnap,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

我正在使用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
#!/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
问题是,目前我只收到以下通知:

Exiftool cronjob在摄像机上完成:4512个文件失败条件

我想得到的是:

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

脚本如下所示:

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
#!/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
#/垃圾箱/垃圾箱
#针对2002问题的exiftool脚本
dir=“/share/Multimedia/Camera”
cd“$dir”
FOLDER=“$(printf'%s\n'${PWD##*/}”)

OUTPUT=“$(exiftool-overwrite_original-r'-CreateDate将尾部放在捕获参数内

OUTPUT=$(exif ... | tail -1)
你不需要这里的双引号,我猜你 尝试


现在可能有一篇旧帖子需要回复,但请尝试使用-n标志(参见tail--help)并使用记号包装命令输出

OUTPUT=`exif ... | tail -n 1`

(user464502的回答对我来说不起作用,因为tail命令无法识别参数“-1”)

谢谢你的回答。不幸的是,它似乎不起作用,因为我现在收到两个通知错误:“Exiftool cronjob在摄像头上完成:语法:Exiftool[OPTIONS]文件有关选项的完整列表,请参阅Exiftool文档。”Exiftool cronjob已在摄像头上完成:4689文件失败条件".@giopas,
exif
无法判断它是否由子shell启动,因此对其使用没有任何影响。可能是同时引入了一个输入错误?将
set-x
放在脚本顶部以启用日志记录,并将原始形式记录的
exif
命令与在c中记录的命令进行比较ommand替换。当时,我正在镜像OP的语法。“-n”是Posix,是首选。现代风格是$(…)而不是反勾号,尽管两者都有效。您可以选择您的答案,而不仅仅是在注释中描述潜在的改进。:)