bash函数以运行或回声字符串



我已经编写了一个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

相关内容

  • 没有找到相关文章

最新更新