Implementando simulação em scripts bash

Implementando simulação em scripts bash

Como alguém implementaria uma opção de simulação em um script bash?

Posso pensar em agrupar cada comando em um if e repetir o comando em vez de executá-lo se o script estiver sendo executado com simulação.

Outra maneira seria definir uma função e depois passar cada chamada de comando por essa função.

Algo como:

function _run () {
    if [[ "$DRY_RUN" ]]; then
        echo $@
    else
        $@
    fi
}

`_run mv /tmp/file /tmp/file2`

`DRY_RUN=true _run mv /tmp/file /tmp/file2`

Isso está errado e há uma maneira muito melhor de fazer isso?

Responder1

Responder2

Queria brincar com a resposta de @Dennis Williamson. Aqui está o que eu consegui:

Run () {
    if [ "$TEST" ]; then
        echo "$*"
        return 0
    fi

    eval "$@"
}

O eval "$@"é importante aqui e é melhor do que simplesmente fazer $*. $@retorna todos os parâmetros e $*retorna todos os parâmetros sem espaços em branco/aspas.

$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file1
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file2

informação relacionada