我已经编写了一个bash脚本,该脚本可创建LVM快照,并且效果很好。最近,我添加了一个函数来制作Dryrrun,以便可以看到会发生什么。为此,我的脚本有几个类似的结构:
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或打印出字符串(正确逃脱)(如果否则)。但是,我不知道该怎么做。
这怎么办?还有其他改进代码的方法吗?
您可以使用类似的东西:
run() {
if (( dryrun )); then
printf "DRYRUN:"
printf ' %q' "$@"
printf 'n'
else
"$@"
fi
}
dryrun=1
run echo "testing testing"
尽管注意到这仅适用于简单命令。Bashfaq 50有更多有关该主题的信息。
解决此问题的另一种方法是仅覆盖Dryrrun的重要命令:
if (( dryrun )); then
lvcreate() {
printf 'DRYRUN: %s' "${FUNCNAME[0]}"; printf ' %q' "$@"; printf 'n'
}
rm() {
printf 'DRYRUN: %s' "${FUNCNAME[0]}"; printf ' %q' "$@"; printf 'n'
}
fi