Как реализовать опцию пробного запуска в скрипте bash?
Я могу подумать о переносе каждой отдельной команды в if и выводе команды вместо ее запуска, если скрипт запускается в режиме без запуска.
Другим способом было бы определить функцию и затем передавать каждый вызов команды через эту функцию.
Что-то вроде:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
Это просто неправильно, и есть намного лучший способ сделать это?
_run()
функции, иногда с помощью 'set -xv', но я бы хотел лучше.Ответы:
Смотрите BashFAQ / 050: я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу! для обсуждения этой темы.
Несмотря на то, что теперь этот раздел удален, раздел « Как добавить возможность тестирования в программы» может быть полезен.
источник
Я хотел поиграть с ответом @Dennis Williamson's. Вот что я получил:
Здесь
eval "$@"
важно, и это лучше, чем просто делать$*
.$@
возвращает все параметры и$*
возвращает все параметры без пробелов и кавычек.источник