我编写了一个bash脚本,它创建了LVM快照,效果很好。最近我添加了一个制作干燥运行的功能,以便我可以看到会发生什么。 为此,我的脚本有几个这样的结构:
if [ $DRYRUN == "1" ]; then
echo "DRYRUN: lvcreate $SNAPSHOT_SIZE -s -n $snapshotName \"$vg/$lv\""
else
lvcreate $SNAPSHOT_SIZE -s -n $snapshotName "$vg/$lv"
fi
太可怕了。我想正确地重构这个。
执行此操作的一种方法是编写一个函数,该函数需要一个字符串,如果未设置DRYRUN,则此函数将字符串作为命令运行,否则打印出字符串(正确转义)。 但是,我不知道该怎么做。
怎么可以这样做? 还有其他改进代码的方法吗?
答案 0 :(得分:0)
您可以使用以下内容:
run() {
if (( dryrun )); then
printf "DRYRUN:"
printf ' %q' "$@"
printf '\n'
else
"$@"
fi
}
dryrun=1
run echo "testing testing"
虽然注意到这只适用于简单的命令。 BashFAQ 50有关于此主题的更多信息。
另一种解决方法是仅覆盖dryrun的重要命令:
if (( dryrun )); then
lvcreate() {
printf 'DRYRUN: %s' "${FUNCNAME[0]}"; printf ' %q' "$@"; printf '\n'
}
rm() {
printf 'DRYRUN: %s' "${FUNCNAME[0]}"; printf ' %q' "$@"; printf '\n'
}
fi