J'ai écrit un programme pour un devoir qui est censé imprimer sa sortie sur stdout. La spécification d'affectation nécessite la création d'un Makefile qui, lorsqu'il est appelé en tant que make run > outputFile
devrait exécuter le programme et écrire le résultat dans un fichier dont l’empreinte SHA1 est identique à celle indiquée dans la spécification.
Mon problème est que mon makefile:
...
run:
Java myprogram
imprime également la commande qui exécute mon programme (par exemple Java mon programme) dans le fichier de sortie, afin que mon fichier contienne cette ligne supplémentaire entraînant une empreinte erronée.
Existe-t-il un moyen d'exécuter une commande sans l'invocation de commande en écho sur la ligne de commande?
Ajouter @
au début de la commande pour indiquer à gmake de ne pas imprimer la commande en cours d'exécution. Comme ça:
run:
@Java myprogram
Comme l’a suggéré Oli, c’est une caractéristique de Make et non de Bash.
D'autre part, Bash n'échouera jamais les commandes en cours d'exécution à moins que vous ne lui demandiez de le faire explicitement (c'est-à-dire avec -x
option).
Encore plus simple, utilisez make -s
(mode silencieux)!
Vous pouvez aussi utiliser .SILENT
.SILENT: run
hi:
echo "Hola!"
run:
Java myprogram
Dans ce cas, make hi
affichera la commande, mais make run
ne sera pas sorti.
L'effet de précéder la commande avec un @
Peut être étendu à une section en étendant la commande en utilisant une barre oblique inverse à la fin de la ligne. Si une commande .PHONY
Est désirée pour supprimer la sortie, vous pouvez commencer la section avec:
@printf "..."