Bash函数运行或回显字符串

时间:2015-05-14 09:11:15

标签: bash

我编写了一个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,则此函数将字符串作为命令运行,否则打印出字符串(正确转义)。 但是,我不知道该怎么做。

怎么可以这样做? 还有其他改进代码的方法吗?

1 个答案:

答案 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