Como alguém implementaria uma opção de execução a seco em um script bash?
Posso pensar em agrupar todos os comandos em um if e repetir o comando em vez de executá-lo se o script estiver sendo executado com dry-run.
Outra maneira seria definir uma função e, em seguida, 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 fazê-lo?
_run()
função, às vezes com 'set -xv', mas adoraria uma maneira melhor.Respostas:
Veja BashFAQ / 050: Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham! para uma discussão sobre este assunto.
Embora agora removida, a seção Como adicionar capacidade de teste a um programa ainda pode ser útil.
fonte
Eu queria brincar com a resposta de @Dennis Williamson's. Aqui está o que eu tenho:
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.fonte