使用撇号转义 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 读取文件并可能允许攻击,并且您可能不希望允许其他各种东西通过 - 例如尾随换行符或分号。
我正在将 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 读取文件并可能允许攻击,并且您可能不希望允许其他各种东西通过 - 例如尾随换行符或分号。