Реализация пробного запуска в скриптах bash

Реализация пробного запуска в скриптах bash

Как реализовать опцию пробного запуска в скрипте bash?

Я могу предложить либо обернуть каждую отдельную команду в if и вывести ее на экран вместо ее запуска, если скрипт выполняется в режиме «dry-run».

Другой способ — определить функцию, а затем передавать каждый вызов команды через эту функцию.

Что-то вроде:

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

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

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

Неужели это неправильно и есть гораздо лучший способ сделать это?

решение1

решение2

Я хотел поиграть с ответом @Dennis Williamson. Вот что у меня получилось:

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

    eval "$@"
}

Здесь это eval "$@"важно, и это лучше, чем просто сделать $*. $@возвращает все параметры и $*возвращает все параметры без пробелов и кавычек.

$ 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

Связанный контент