J'utilise un Makefile (avec GNU make fonctionnant sous Linux) pour automatiser mon travail de base lors de la refactorisation d'un script Python. Le script crée un fichier de sortie, et je veux m'assurer que le fichier de sortie reste inchangé face à mes refactorings.Les codes d'état du shell en make
Cependant, je n'ai trouvé aucun moyen d'obtenir le code d'état d'une commande pour affecter une prochaine commande shell.
La règle suivante illustre le problème:
check-cond-codes:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
diff -q poalim report2008_4.csv; echo differences: =$$!=
Le premier « diff » compare deux fichiers égaux, et le second compare deux fichiers différents. La sortie est:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Alors, évidemment, '$$! est la mauvaise variable pour capturer le code d'état de 'diff'. Même en utilisant SHELL: =/bin/bash au début du Makefile n'a pas résolu le problème.
Une variable renvoyant la valeur dont j'ai besoin serait (si elle existe) utilisée dans une commande 'if' dans la règle réelle.
L'alternative de créer un petit script shell ad-hoc au lieu d'écrire toutes les commandes en ligne dans le Makefile n'est pas souhaitable, mais je vais l'utiliser en dernier recours.
connexes:
Je ne trouve rien '' $$ dans le lien que vous avez fourni!. Pouvez-vous être plus précis en modifiant l'URL et en donnant directement la réponse à la 4ème réponse de Exit Shell Script basé sur le code de sortie du processus en utilisant le lien 'share' sous la 4ème réponse s'il est encore au 4ème position – SebMa