Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/01/2010, à 19: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, à 19: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, à 20: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, à 20: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, à 20:55)

Hors ligne

#5 Le 17/01/2010, à 23: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, à 23: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, à 03: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, à 03:38)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#7 Le 18/01/2010, à 12: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, à 12:25)


-- Lucid Lynx --

Hors ligne

#8 Le 18/01/2010, à 16: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, à 16:35)


-- Lucid Lynx --

Hors ligne