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
VerBashFAQ/050: Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham!para uma discussão sobre esse assunto.
Embora agora removida, a seçãoComo adicionar capacidade de teste a programasainda pode ser útil.
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