有条件地在Bash中进行重定向以进行测试和调试的最佳方法是什么?
在我的脚本中,我添加了一个调试选项,以显示在没有任何处理的情况下有效地进行测试运行会发生的情况。如果debug选项启用了,我希望DEBUG选项回显带有重定向的脚本行,有效地回显重定向而不重定向回显。一个示例可能会更好地解释这一点:
在使用传递给它的args进行mysqldump的脚本中,我希望debug选项显示mysqldump命令,因为如果不使用-d选项,它将运行。
[ "-d" = "$1" ] && DEBUG=echo
$DEBUG mysqldump -u"$user" -p"$pass" -h"$host" "$dbase" > $dbase.sql.dump
因此,如果我要回显的原因是DEBUG是“ echo”,则我不想回显到“ $ dbase.sql.dump”,而实际上我想使用“ .sql.dump”来回显“>”和“ $ dbase”变量。 “ 文本。如果debug选项没有打开,我想按原样运行命令。
在set -x
和set -v
自调试真的只是一个测试输出/干运行选项,用户可以看到,并没有真正的调试脚本来修复编码问题的选项是不是真的在这里的答案。
问题将是正确地转义所有内容。您为什么不尝试一个稍微不同的方法,例如:
CMD='mysqldump -u"$user" -p"$pass" -h"$host" "$dbase" > "$dbase.sql.dump"';
[ "-d" = "$1" ] && echo $CMD
eval $CMD
诀窍是将命令另存为变量,然后仅在调试时才打印变量。这消除了将其写出两次的需要,然后您就可以使用eval
该变量来执行其中包含的命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句