Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pourquoi 2>&1 dans une fonction trap ?

echo "Script interrupted." 2>&1

    8 février 2021 à 13:14:32

    Bonjour,

    à la fin d'un livre - The Linux Command Line - la fonction trap est traitée succinctement.

    Il nous est donné un petit script - trap-demo2 - ou l'utilisation de fonction est utilisée:

    thierry@toto-PC:~/bin> cat trap_demo2
    #!/bin/bash
    
    # trap_demo2: simple signal handling demo
    
    exit_on_signal_SIGINT () {
            echo "Script interrupted." 2>&1
            exit 0
    }
    
    exit_on_signal_SIGTERM () {
            echo "Script terminated." 2>&1
            exit 0
    }
    
    trap exit_on_signal_SIGINT SIGINT
    trap exit_on_signal_SIGTERM SIGTERM
    
    for i in {1..5}; do
            echo "Iteration $i of 5"
            sleep 5
    done


    À quoi sert 2>&1 dans chacune des deux fonctions ? Si je les enlève, le résultat est apparemment le même.

    Merci pour vos lumières  :)

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2021 à 16:08:08

      je donne ma langue au chat.
      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        9 février 2021 à 10:45:53

        Je pense que c'est simplement la redirection du standard_error de la dernière commande echo, vers le standard_output (vers l'écran - display) de cette même commande echo.

        Ici la commande echo fonctionne correctement, donc son flux standard_error est vide, il ne s'affiche rien de plus…

        1- echo  affiche "Script interrupted." à l'écran;

        2- la commande echo se termine sans erreur, sa sortie standard_error est vide

        3- rien de plus ne s'affiche à l'écran…

        -
        Edité par DenebeDenebe 9 février 2021 à 10:49:43

        • Partager sur Facebook
        • Partager sur Twitter
          9 février 2021 à 11:37:37

          Bonjour,

          Justement, quel intérêt de rediriger stderr vers stdout quand bien même on aurait une erreur?

          Ça «semble» inutile, d'où la pertinence de ta question, pourquoi l'avoir fait alors? ^^

          Peut-être que c'était l'inverse qui était voulu: afficher le message dans stderr et il a été fait une petite gaffe en inversant le 1 et le 2 (1>&2).

          • Partager sur Facebook
          • Partager sur Twitter
            9 février 2021 à 11:45:25

            par défaut, echo affiche sa sortie sur stdout
            echo retourne toujours vrai, à moins d'une erreur de syntaxe, et alors c'est le shell qui gérera l'erreur.

            dans ce script, la sortie d'erreur de la commande echo est redirigée vers la sortie standard/normale.

            mais, comme établi précédemment, echo affiche sa sortie par défaut (étant également établi qu'elle ne peut échouer) sur la sortie standard,
            donc rediriger sa sortie d'erreur (qu'elle n'a pas) n'a pas d'intérêt, et pas de sens.

            l'auteur est-il joignable ? alors, ça mériterait qu'il explique cette singularité de son code.

            • Partager sur Facebook
            • Partager sur Twitter

            Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

              17 février 2021 à 18:35:37

              Bonsoir,

              pardon pour les quelques jours…

              J'ai cherché à contacter l'auteur il y a déjà une dizaine de jours, sans réponse. Je pense qu'il y a eu un soucis avec l'envoi. Je vais à nouveau essayer.

              • Partager sur Facebook
              • Partager sur Twitter

              Pourquoi 2>&1 dans une fonction trap ?

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown