j'ai besoin d'une connexion ssh avec 3 descripteurs de fichier en sortie.=
=2E.
une id=E9e sur la m=E9thode =E0 employer ?
l'id=E9e de d=E9part est d'avoir une 2eme sortie d'erreur redirig=E9e sur=
=20
stdout, mais distincte tout de m=EAme afin que les affectations de
variables ne soient pas pollu=E9es par les messages d'erreurs, genre :
(
exec 3>&1
x=3D$(echo x; echo ko >&2; echo ok >&3)
# x vaut bien x
) > messages_ok 2> messages_ko
pas de pb en local, mais via ssh, =E7a se complique...
ssh host "exec 3>&0; echo 1; echo 2 >&2; echo 3 >&3" 0>&3
ne marche pas car ssh ne sait pas =E9crire sur stdin :(
pour le moment, j'essaye une m=E9thode avec des fifos en faisant
passer les flux 2 et 3 sur stderr avec des marqueurs, mais c'est
trop lourd =E0 mon gout... sans parler du pb de d=E9synchronisation
dans la log de sortie du fait de la bufferisation de stdout.
PS : ksh88 uniquement :) pas de zsh, perl, et autres joyeuset=E9s...
Cordialement,
Cyrille Lefevre.
--=20
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LENHOF Jean-Yves
Le Mon, 28 Apr 2008 13:15:40 +0200, Cyrille Lefevre a écrit:
Bonjour,
j'ai besoin d'une connexion ssh avec 3 descripteurs de fichier en sortie...
une idée sur la méthode à employer ?
l'idée de départ est d'avoir une 2eme sortie d'erreur redirigée sur stdout, mais distincte tout de même afin que les affectations de variables ne soient pas polluées par les messages d'erreurs, genre :
( exec 3>&1 x=$(echo x; echo ko >&2; echo ok >&3) # x vaut bien x ) > messages_ok 2> messages_ko
pas de pb en local, mais via ssh, ça se complique...
ssh host "exec 3>&0; echo 1; echo 2 >&2; echo 3 >&3" 0>&3 ne marche pas car ssh ne sait pas écrire sur stdin :(
pour le moment, j'essaye une méthode avec des fifos en faisant passer les flux 2 et 3 sur stderr avec des marqueurs, mais c'est trop lourd à mon gout... sans parler du pb de désynchronisation dans la log de sortie du fait de la bufferisation de stdout.
PS : ksh88 uniquement :) pas de zsh, perl, et autres joyeusetés...
Cordialement,
Cyrille Lefevre.
Salut Cyrille,
Puisque ds une autre vie tu me parlais bcp de BSD, je me demandes si ce lien ne pourrait pas t'aider, c'est à base des commandes "faucet", "hose" et forwarding ssh
Le Mon, 28 Apr 2008 13:15:40 +0200, Cyrille Lefevre a écrit:
Bonjour,
j'ai besoin d'une connexion ssh avec 3 descripteurs de fichier en
sortie...
une idée sur la méthode à employer ?
l'idée de départ est d'avoir une 2eme sortie d'erreur redirigée sur
stdout, mais distincte tout de même afin que les affectations de
variables ne soient pas polluées par les messages d'erreurs, genre :
(
exec 3>&1
x=$(echo x; echo ko >&2; echo ok >&3) # x vaut bien x
) > messages_ok 2> messages_ko
pas de pb en local, mais via ssh, ça se complique...
ssh host "exec 3>&0; echo 1; echo 2 >&2; echo 3 >&3" 0>&3 ne marche pas
car ssh ne sait pas écrire sur stdin :(
pour le moment, j'essaye une méthode avec des fifos en faisant passer
les flux 2 et 3 sur stderr avec des marqueurs, mais c'est trop lourd à
mon gout... sans parler du pb de désynchronisation dans la log de sortie
du fait de la bufferisation de stdout.
PS : ksh88 uniquement :) pas de zsh, perl, et autres joyeusetés...
Cordialement,
Cyrille Lefevre.
Salut Cyrille,
Puisque ds une autre vie tu me parlais bcp de BSD, je me demandes si ce
lien ne pourrait pas t'aider, c'est à base des commandes "faucet", "hose"
et forwarding ssh
Le Mon, 28 Apr 2008 13:15:40 +0200, Cyrille Lefevre a écrit:
Bonjour,
j'ai besoin d'une connexion ssh avec 3 descripteurs de fichier en sortie...
une idée sur la méthode à employer ?
l'idée de départ est d'avoir une 2eme sortie d'erreur redirigée sur stdout, mais distincte tout de même afin que les affectations de variables ne soient pas polluées par les messages d'erreurs, genre :
( exec 3>&1 x=$(echo x; echo ko >&2; echo ok >&3) # x vaut bien x ) > messages_ok 2> messages_ko
pas de pb en local, mais via ssh, ça se complique...
ssh host "exec 3>&0; echo 1; echo 2 >&2; echo 3 >&3" 0>&3 ne marche pas car ssh ne sait pas écrire sur stdin :(
pour le moment, j'essaye une méthode avec des fifos en faisant passer les flux 2 et 3 sur stderr avec des marqueurs, mais c'est trop lourd à mon gout... sans parler du pb de désynchronisation dans la log de sortie du fait de la bufferisation de stdout.
PS : ksh88 uniquement :) pas de zsh, perl, et autres joyeusetés...
Cordialement,
Cyrille Lefevre.
Salut Cyrille,
Puisque ds une autre vie tu me parlais bcp de BSD, je me demandes si ce lien ne pourrait pas t'aider, c'est à base des commandes "faucet", "hose" et forwarding ssh
pour l'heure, j'utilise la saloperie ci-dessous et j'appelle ssh de la façon suivante : PeuSshFilterLog ssh ... auparavant, j'ai un : exec 3>&1, d'ou le test sur $_PEU_FD, ontrap le ferme : exec 3>&-
tout ce qui est trace qqc me permet d'activer les traces au besoin pour une, plusieurs ou toutes fonctions. j'aurais pu faire plus simple en ksh (typeset -ft), mais sous bash, c'est tout ou rien... en tous cas, pas comme on veut... quelle merde ce shell ! pas que pour ça d'ailleurs. ..
pour autant, je crois même que ça marche sous bash, un exploit !
pour l'heure, j'utilise la saloperie ci-dessous et j'appelle ssh de la
façon suivante : PeuSshFilterLog ssh ... auparavant, j'ai un :
exec 3>&1, d'ou le test sur $_PEU_FD, ontrap le ferme : exec 3>&-
tout ce qui est trace qqc me permet d'activer les traces au besoin pour
une, plusieurs ou toutes fonctions. j'aurais pu faire plus simple en ksh
(typeset -ft), mais sous bash, c'est tout ou rien... en tous cas, pas
comme on veut... quelle merde ce shell ! pas que pour ça d'ailleurs. ..
pour autant, je crois même que ça marche sous bash, un exploit !
if [[ -n ${_PEU_OUT_PID} ]]; then
: kill -USR1 "${PEU_OUT_PID}"
wait "${PEU_OUT_PID}"
_PEU_OUT_PID=
fi
if [[ -n ${_PEU_ERR_PID} ]]; then
: kill -USR2 "${PEU_ERR_PID}"
wait "${PEU_ERR_PID}"
_PEU_ERR_PID=
fi
exec 5>&1 4>&2
while read fd rest; do
case ${fd} in
'1') print -r -- "${rest}" ;;
'2') print -ru2 -- "${rest}" ;;
'3') print -ru3 -- "${rest}" ;;
esac
done < "${logfile}"
exec 1>&5 2>&4 5>&- 4>&-
${_RM} -f "${logfile}"
set +x; eval ${trace}
return 0
}
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
pour l'heure, j'utilise la saloperie ci-dessous et j'appelle ssh de la façon suivante : PeuSshFilterLog ssh ... auparavant, j'ai un : exec 3>&1, d'ou le test sur $_PEU_FD, ontrap le ferme : exec 3>&-
tout ce qui est trace qqc me permet d'activer les traces au besoin pour une, plusieurs ou toutes fonctions. j'aurais pu faire plus simple en ksh (typeset -ft), mais sous bash, c'est tout ou rien... en tous cas, pas comme on veut... quelle merde ce shell ! pas que pour ça d'ailleurs. ..
pour autant, je crois même que ça marche sous bash, un exploit !