Simuler le fonctionnement d'un «make install» - un «run à sec» ou un utilitaire de simulation?

13

Existe-t-il un moyen générique d'exécuter un script bash et de voir les commandes qui en résultent, mais pas réellement d'exécuter les commandes - c'est-à-dire un "dry run" / simulateur en quelque sorte?

J'ai un script d'installation de base de données (en fait "make install" après avoir exécuté ./configure and make) que je souhaite exécuter, mais il installe toutes sortes de choses que je ne veux pas.

J'aimerais donc avoir un moyen de voir exactement ce qu'il va faire avant de l'exécuter pour de vrai - peut-être même d'exécuter les commandes à la main à la place.

Y a-t-il un utilitaire qui peut effectuer une telle tâche (ou quelque chose de similaire / similaire)?

Vérace
la source
Je pense que 'set -n' fait quelque chose comme ça. Essayez également d'ajouter -x.
Jeff Schaller
Comment diriger "make install" vers set -n?
Vérace
bash -n make install, mais à partir de man bash: "Un shell interactif peut ignorer cette option."
pfnuesel
Il n'y a pas d'option dryrun dans bash. Voir aussi ici stackoverflow.com/questions/19115156/…
pfnuesel

Réponses:

16

GNU make a une option pour faire un essai à sec:

'-n'

«--just-print»

'--dry-run'

«--recon»

«No-op». Oblige make à imprimer les recettes nécessaires pour actualiser les cibles, mais pas à les exécuter. Notez que certaines recettes sont toujours exécutées, même avec cet indicateur (voir Fonctionnement de la variable MAKE). De plus, toutes les recettes nécessaires pour mettre à jour les makefiles inclus sont toujours exécutées.

Donc, pour votre situation, exécutez simplement make -n installpour voir les commandes qui makes'exécuteraient.

Jeff Schaller
la source
5

Toute version de makepossède une -noption (voir la description POSIX demake ), mais le shell n'a pas d'option correspondante (voir par exemple Afficher les commandes sans les exécuter ).

Pour aggraver la situation, s'il vous arrive d'utiliser automake, il colle de gros morceaux de scripts passe-partout (que ses développeurs appellent des "règles récursives") qui annulent la capacité de quiconque d'utiliser "make -n" et de voir ce qui va se produire.

Lectures complémentaires:

Thomas Dickey
la source