[bash] exec et STDERR

Bonsoir,

J’ai un script dans lequel j’ai :exec 2>>fichier.log
pour stocker les messages d’erreur.
Hors j’ai aussi certaines sorties de commande qui aterrissent dans ce fichier.
Il en est ainsi du résultat de l’exécution normale de dd, et, plus gênant, quand je fais un :read -p "texte" var
le texte n’est pas affiché dans la console mais dirigé vers le fichier.

Merci.

Salut,

V R S :imp: !

Section Programmation nan ?

Hello Zorgluboudou

Au diable les réponses à la c…
Je tente de t’aider.
Explication
La ligne exec 2>>fichier.log redirige la sortie d’erreur dans le fichier .log (perso la sortie STDERR, le canal 2, je la redirige dans un fichier .err) et read (cf man bash) affiche le prompt dans cette même sortie.
Il te faut donc :

  • sauvegarder le canal de sortie via la commande
exec 7>&2
  • faire de redirection du canal 2
exec 2>${FICHIER_ERR}

et avant ton read faire un

exec 2>&7

Soit ce petit script :

#!/bin/bash
exec 7>&2
exec 2> fichier.log
ls >&2
date >&2

exec 2>&7
read -p "Texte" var
echo $var

LeDub script-addict

Gloups de quoi faire un noeud à un cou de girafe. Merci LeDub.
Y a-t-il une raison pour que cette commande diabolique (…), entre autres, envoie le prompt vers STDERR ?

Sinon, je l’avais déjà signalé ici, leman readouman bash read me renvoie une fonction C.

[quote=“Zorgluboudou”]Gloups de quoi faire un noeud à un cou de girafe. Merci LeDub.
Y a-t-il une raison pour que cette commande diabolique (…), entre autres, envoie le prompt vers STDERR ?[/quote]Là, je ne peux pas te répondre, je ne suis pas dans le secret des dieux mais sache que je partage ton avis qui serait que l’invite soit faite sur la sortie standard donc le canal 1 !

LeDub pas encore prêt à forker “read” !!!

:slightly_smiling:
Merci.