我想回显脚本正在运行的命令以进行调试。
所以,我的脚本有一行运行命令:
negate() {
echo \( "$1" -negate \)
}
NEGATED_IMAGE="$(negate 'my image.png')"
convert $=NEGATED_IMAGE two.png -composite out.png
我只需在回显后将其复制粘贴到上面即可查看运行的命令:
echo convert $=NEGATED_IMAGE two.png -composite out.png
convert $=NEGATED_IMAGE two.png -composite out.png
日志没有我想要的那么有用。以上日志
convert ( my image.png -negate ) two.png -composite out.png
无法将其复制粘贴到我自己的命令行中来运行相同的命令,因为括号未转义,
input image.png
参数中的空格也未转义或引用。
那么,我的脚本如何记录它将执行的命令行,以便将记录的行复制粘贴到我的 zsh 提示符中将运行相同的命令?
所以上面的案例应该记录类似的内容
convert \( 'my image.png' -negate \) two.png -composite out.png
因为这是脚本正在执行的实际命令。
$(image_one 'input image.png')
的标准输出成为convert
的第一个参数,因此convert将字符串( input image.png -negate )
视为第一个参数。
将参数传递给程序时,首先编写参数列表以及它们应该位于哪个参数位置是有意义的。根据您的描述,我了解到
convert
应该获得以下参数:
(
input image.png
因此,目标是创建一个包含 4 个元素的数组,然后可以将其插入到 convert 的调用中。您还想使用一个辅助函数,它只接收第二个参数并添加其他 3 个参数。
这是一种可能的方法:
image_one() {
arrname=${1?Array name missing}
par2=$2
eval $arrname'=( "(" $par2 -negate ")" )
}
image_one myarr 'image image.png'
convert "${myarr[@]}" two.png -composite out.png