使用撇号转义 imagemagick 文本输入

Escaping imagemagick text input with apostrophes

我正在将 display-dhammapada 的文本输出绘制到现有图像中。以下 CLI 命令有效:

convert test.jpg 
    -pointsize 30 
    -draw "gravity northwest 
           fill black 
           text 120,200 '$( display-dhammapada)'" 
    result.png

...除非我收到有收缩的报价。然后文本输入过早结束并出现错误,例如:

convert: non-conforming drawing primitive definition `s' @ error/draw.c/DrawImage/3182

这是撇号的大小写。

如果我将引号从 " ' ' " 反转为 ' " " ',那么我最终会在图像上得到文字文本 $( display-dhammapada)

在这种情况下,清理我的输入的最佳方法是什么?

您可以像这样通过 sed 清理您的报价:

convert -size 1000x1000 xc:red -pointsize 30 -draw "gravity northwest fill black text 120,200 '$(./display-dhammapada|sed "s/'/\\'/g")'" result.png

显示法句经

#!/bin/bash
printf "There's one there!"

仅供参考:

编写一个您可以维护和修改的通用消毒程序脚本可能是个好主意。您可以考虑不允许它通过 @ 作为第一个字符,这会使 ImageMagick 读取文件并可能允许攻击,并且您可能不希望允许其他各种东西通过 - 例如尾随换行符或分号。