¿Cómo se implementaría una opción de ejecución en seco en un script bash?
Puedo pensar en envolver cada comando individual en un if y repetir el comando en lugar de ejecutarlo si el script se ejecuta con ejecución en seco.
Otra forma sería definir una función y luego pasar cada llamada de comando a través de esa función.
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`
¿Esto está mal y hay una manera mucho mejor de hacerlo?
_run()
función, a veces con 'set -xv', pero me encantaría una mejor manera.Respuestas:
Ver BashFAQ / 050: Estoy tratando de poner un comando en una variable, ¡pero los casos complejos siempre fallan! para una discusión de este tema.
Aunque ahora se eliminó, la sección Cómo agregar capacidad de prueba a un programa aún puede ser útil.
fuente
Quería jugar con la respuesta de @Dennis Williamson. Esto es lo que obtuve:
El
eval "$@"
que es importante aquí, y es mejor que simplemente haciendo$*
.$@
devuelve todos los parámetros y$*
devuelve todos los parámetros sin espacios en blanco / comillas.fuente