GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir l'état de sortie d'une commande shell utilisée dans GNU Makefile ?

Dans le makefile- :

mycommand || (echo "mycommand failed $$?"; exit 1)

Chaque ligne de l'action makefile invoque un nouveau shell - l'erreur doit être vérifiée dans la ligne d'action où la commande a échoué.

Si macommande échoue, la logique se branche sur l'instruction echo, puis quitte.


Si tout ce que vous voulez est pour le make à abandonner si l'outil sort avec un état différent de zéro, make le fera déjà par défaut.

Exemple Makefile :

a: b
    @echo making [email protected]
b:
    @echo making [email protected]
    @false
    @echo already failed

.C'est ce qui se passe avec mon make :

$ make
making b
make: *** [Makefile:6: b] Error 1

Assurez-vous que les cibles partiellement ou entièrement créées sont supprimées en cas d'échec. Par exemple, cela

a: b
    @gena $+ > [email protected]
b:
    @genb > [email protected]

est incorrect :si au premier essai, genb échoue, il laissera probablement un b incorrect , qui, au deuxième essai, make supposera est correct. Vous devez donc faire quelque chose comme

a: b
    @gena $+ > [email protected] || { rm [email protected]; exit 1; }
b:
    @genb > [email protected]

Voici quelques autres approches :

shell &.SHELLSTATUS

some_recipe:
    @echo $(shell echo 'doing stuff'; exit 123)
    @echo 'command exited with $(.SHELLSTATUS)'
    @exit $(.SHELLSTATUS)

Sortie :

$ make some_recipe

doing stuff
command exited with 123      
make: *** [Makefile:4: some_recipe] Error 123

Il a la mise en garde que le shell la sortie de la commande n'est pas diffusée, vous vous retrouvez donc avec un vidage vers stdout lorsqu'il se termine.

$?

some_recipe:
    @echo 'doing stuff'; sh -c 'exit 123';\
    EXIT_CODE=$$?;\
    echo "command exited with $$EXIT_CODE";\
    exit $$EXIT_CODE

Ou, un peu plus facile à lire :

.ONESHELL:

some_recipe:
    @echo 'doing stuff'; sh -c 'exit 123'
    @EXIT_CODE=$$?
    @echo "command exited with $$EXIT_CODE"
    @exit $$EXIT_CODE

Sortie :

$ make some_recipe

doing stuff                  
command exited with 123      
make: *** [Makefile:2: some_recipe] Error 123

Il s'agit essentiellement d'une chaîne de commandes, exécutées dans le même shell.


Linux
  1. Tutoriel sur l'état de sortie de Bash Shell avec des exemples pratiques

  2. Comment utiliser les alias du shell sous Linux

  3. Comment supprimer la base de données mysql via la commande shell

  4. Comment quitter si une commande a échoué ?

  5. Obtenir la première ligne de la sortie d'une commande shell

Comment exécuter une commande Shell avec Python

Comment rediriger la sortie de la commande shell

Comment stocker une commande Linux en tant que variable dans un script shell

Comment utiliser la commande Declare dans Linux Bash Shell

Comment exécuter une commande dans un script shell ?

Comment lire les arguments de ligne de commande dans les scripts shell ?