Comment pourrait-on implémenter une option de dry-run dans un script bash?
Je peux penser à encapsuler chaque commande dans un if et à faire écho à la commande au lieu de l'exécuter si le script s'exécute avec une exécution à sec.
Une autre façon serait de définir une fonction, puis de passer chaque appel de commande via cette fonction.
Quelque chose comme:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
Est-ce juste faux et il existe une bien meilleure façon de le faire?
_run()
fonction, parfois avec 'set -xv', mais j'aimerais une meilleure façon.Réponses:
Voir BashFAQ / 050: J'essaie de mettre une commande dans une variable, mais les cas complexes échouent toujours! pour une discussion de ce sujet.
Bien que maintenant supprimée, la section Comment ajouter des capacités de test à un programme peut toujours être utile.
la source
Je voulais jouer avec la réponse de @Dennis Williamson. Voici ce que j'ai obtenu:
Le
eval "$@"
est important ici, et vaut mieux que de le faire simplement$*
.$@
renvoie tous les paramètres et$*
renvoie tous les paramètres sans espace / guillemet.la source