#1 Le 17/01/2010, à 18:44
- zemil88
comment recupéré la sortie erreur sans pasé par un fichier ?
fichier echo.sh-----------------------------------------------------------
#!/bin/bash
echo "test out">&1
echo "test err"2>&2
fichier test.sh-----------------------------------------------------------
#!/bin/bash
sortie=`./echo.sh 2>err.txt`
sortie_err=`cat err.txt`
echo "sortie:"$sortie_err
echo "ereur:"$sortie
Q: comment ne pas passé par un fichier pour recupéré la sortie erreur ?
Hors ligne
#2 Le 17/01/2010, à 18:52
- Tristan107
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
Ca me paraitrait plus logique de dire ce que tu veux faire, plutôt que ce que tu veux éviter... Que veux dire pour toi "Récupérer la sortie d'erreur"
La sortie d'erreur s'affiche naturellement sur l'écran si tu ne fais rien. Après, tu peux la rediriger vers un fichier "2> err.txt" ou la rediriger vers la sortie standard "2>&1".
Si tu veux simuler une génération sur la sortie d'erreur, il faut plutôt faire 1>&2 et pas 2>&2
Hors ligne
#3 Le 17/01/2010, à 19:37
- sputnick
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
Voici comment recuperer STDOUT ou STDERR dans une variable :
$ MyStderr=$(ls vgbqfgbjkjbgfk 2>&1)
$ echo $MyStderr
ls: ne peut accéder vgbqfgbjkjbgfk: Aucun fichier ou dossier de ce type
$ MyStdout=$(ls -l .bashrc 2>/dev/null)
$ echo $MyStdout
-rw-r--r-- 1 sputnick users 12936 janv. 17 07:35 .bashrc
$
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#4 Le 17/01/2010, à 19:54
- zemil88
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
je veux pouvoir récupéré 2 variable
la commande que j'utilise
$sortie=`lynx -dump "http://ip/" 2>err.txt`
sortie_err=`cat err.txt`
$sortie_err (le message erreur)
$sortie (la sortie normal)
dans exemple que j'ai donné j'y arrive mais en passant par un fichier pour recupéré sortie erreur
comment ne pas passé par un fichier ?
Dernière modification par zemil88 (Le 17/01/2010, à 19:55)
Hors ligne
#5 Le 17/01/2010, à 22:26
- FRUiT
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
OUT=$(sh -n -c "COMMANDE 2>/dev/null")
ERROR=$(sh -n -c "COMMANDE 2>&1 >/dev/null")
Dernière modification par FRUiT (Le 17/01/2010, à 22:39)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#6 Le 18/01/2010, à 02:35
- sputnick
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
Un truc à perfectionner ( pour charger les variables quand on lance le script et le simplifier ):
Dans un script :
bash -c "ls -l ~/.bashrc azeert" 1> >(echo MyOut=\"$(cat)\";) 2> >(echo;echo >&2 MyErr=\"$(cat)\")
eval "bash -c \"$MyErr\""
Puis on appelle le script, pour exporter les variables qu'on rempli avec la sortie d'erreur et standard.
ls -l ~/.bashrc azeert envoi sur les 2 sorties : on a un fichier existant et un fichier inexistant...
Dernière modification par sputnick (Le 18/01/2010, à 02:38)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#7 Le 18/01/2010, à 11:09
- Totor
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
Bonjour,
Voilà une solution pour récupérer la sortie standard et d'erreur sans passer par un quelconque fichier :
sortie="$(exec 2>&1; std="$(ls -l al* w*)"; echo -e "@@@\n${std}")"
standard="$(awk 'BEGIN {RS="@@@\n"} NR==2' <<< "${sortie}")"
erreur="$(awk 'BEGIN {RS="@@@\n"} NR==1' <<< "${sortie}")"
@+
EDIT : simplifications
Dernière modification par Totor (Le 18/01/2010, à 11:25)
-- Lucid Lynx --
Hors ligne
#8 Le 18/01/2010, à 15:26
- Totor
Re : comment recupéré la sortie erreur sans pasé par un fichier ?
Autre solution (full bash, sans intermédiaire et avec en prime le status de la commande dans la variable status)
eval "erreur=\"$( { std="$(ls -l al* w*)"; st=$?; } 2>&1; echo "\";standard=\"${std}\";status=${st}")"
Dernière modification par Totor (Le 18/01/2010, à 15:35)
-- Lucid Lynx --
Hors ligne