通过 Ruby 捕获外壳脚本执行日志



我尝试使用 convert 命令将大量 pdf 文件转换为图像。我从我的文件夹中读取所有文件,其中包含pdf和html文件,但html文件的扩展名为".pdf"。我从远程服务器接收了这些文件,所以我无法检查哪些文件是pdf文件,哪些不是。我使用了以下代码:

%x[convert "#{source_path}" "#{destination_path}".jpg]

source_path指向 html 文件时,将返回以下错误:

GPL 代笔 8.60:不可恢复 错误,退出代码 1 转换:后记 委托失败 /home/20100.pdf': @ error/pdf.c/ReadPDFImage/645. convert: missing an image filename /home/test/20100-1.jpg' @ error/convert.c/ConvertImageCommand/2970. 成功错误:/语法错误在 -file- 操作数堆栈:

执行堆栈: %interp_exit
.runexec2 --nostringval--
--nostringval-- --nostringval-- 2 %stopped_push --nostringval--
--nostringval-- --nostringval-- false 1 %stopped_push 1889 1
3 %oparray_pop 1888 1 3
%oparray_pop 1872 1 3
%oparray_pop 1755 1 3
%oparray_pop --nostringval--
%errorexec_pop .runexec2
--nostringval-- --nostringval-- --nostringval-- 2 %stopped_push 字典堆栈:
--字典:1149/1684(ro)(G)-- --字典:0/20(G)-- --字典:70/200(L)-- 当前分配模式为本地 当前文件位置为 1

是否可以获取任何布尔值,或者是否有任何方法可以确定 shell 脚本是否正确执行?

是的,检查$?.exitstatus是否为 0。

>> %x{ls /etc/services}
=> "/etc/servicesn"
>> $?.exitstatus
=> 0
>> %x{ls failfail}
ls: cannot access failfail: No such file or directory
=> ""
>> $?.exitstatus
=> 2

除了 tokland 的解决方案,如果你不需要命令的返回值(但前提是它正常工作),你也可以使用 system

>> system 'ls /etc/services'
/etc/services
=> true
>> system 'ls /etc/failfail'
ls: cannot access /etc/failfail: No such file or directory
=> false

应该只将PDF文件转换为jpg。(新文件将具有扩展文件.pdf.jpg)

ls -1 | xargs file | grep ': PDF document,' | sed 's/:.*//' | xargs -I % convert % %.jpg

或者这将仅将 PDF 文件转换为文件名.jpg

ls -1 | xargs file | grep ': PDF document,' | sed 's/:.*//' | while read file; do b=`basename $file .pdf`; convert $file $b.jpg; done

最新更新