Forum Programmation.shell Redirection générale

Posté par  .
Étiquettes : aucune
0
20
déc.
2005
Bonjour à tous.
Je vais essayer d'être clair dans mes explications.
Je cherche le moyen de rediriger tous les retours vers le même endroit, mais sans avoir à le faire ligne à ligne.
Par exemple:
au lieu de faire
action 1 > /dev/nul
action2 > /dev/nul
action3 >/dev/nul

je voudrais faire:
[mode dev/null on]
action1
action2
action3
[mode dev/null off]

Autrement formulé: existe t-il un moyen d'intercepter de façon générale ce qui part vers stdout ? Est ce faisable ?
  • # exec [redirection ...]

    Posté par  . Évalué à 10.

    Par exemple :

    % cat devnull
    #!/bin/sh
    echo "on me voit"
    # sauvegarde de stdout et redirection vers /dev/null
    exec 3>&1 1>/dev/null
    echo "on ne me voit plus"
    # restauration de stdout et ménage de la sauvegarde
    exec 1>&3 3>&-
    echo "on me voit à nouveau"

    % ./devnull
    on me voit
    on me voit à nouveau


    Évidemment, c'est le même principe si tu veux aussi supprimer la sortie d'erreur, c'est à dire :

    ...
    # sauvegarde de stdout et stderr, et redirection vers /dev/null
    exec 3>&1 4>&2 &>/dev/null
    ...
    # restauration de stdout et stderr, et ménage des sauvegardes
    exec 1>&3 2>&4 3>&- 4>&-
    ...
  • # groupage de commandes

    Posté par  . Évalué à 9.

    La solution indiquée ci-dessus avec des exec fonctionne mais on peut aussi regrouper plusieurs commandes avec des {}:
    {
       action1
       action2
       action3
    } > /dev/null
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.