IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Redirection bloquante


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Redirection bloquante
    Bonsoir,

    J'essaie de faire des curl mais je veux récupérer le code retour http pour relancer les curl en erreur comme timed out.
    J'ai trouvé un bout de code qui fonctionne bien, par contre, le reformat_json ne fonctionne plus avec cette façon de faire , le code à droite du pipe n'est pas exécuté.

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # creates a new file descriptor 3 that redirects to 1 (STDOUT)
    exec 3>&1
     
    HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://URL.fr' | json_reformat | awk -F ":" '{ $1 = "" ; print $0 }' |sed '1,10d')
     
    echo "HTTP_STATUS : "$HTTP_STATUS

    Je récupère bien le code retour dans HTTP_STATUS mais à partir du json_reformat rien ne semble s'exécuter.

    Une idée pour permettre que ce bout de code soit exécuté ?

    Merci par avance.
    Dernière modification par N_BaH ; 30/07/2021 à 14h13.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 361
    Par défaut
    En fait, tu te complique la vie, le pipe ne concerne que le stdout et comme ici tu utilises le fd 3 et non le fd 1 , le pipe ne voit rien.

    Pour faire plus simple, tu as la variable (tableau) PIPESTATUS qui te donne le status de chaque commande du pipeline (mais on ne peut la lire qu'en une seule fois) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ false | true | false | false | true
    $ echo ${PIPESTATUS[0]}
    1
    $ echo ${PIPESTATUS[1]}
     
    $ false | true | false | false | true
    $ echo ${PIPESTATUS[@]}
    1 0 1 1 0
    $ echo ${PIPESTATUS[@]}
    0
    $ false | true | false | false | true
    $ xx=(${PIPESTATUS[@]})
    $ echo ${xx[0]}
    1
    $ echo ${xx[1]}
    0
    $ echo ${xx[2]}
    1

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut et merci de ta réponse.
    Depuis j'ai remplacé &1 par un nom de fichier : res.json

    Je comprends que le pipe n'est pas pris en compte.
    Mais j'ai absolument besoin de reformater en json comme indiqué après le pipe car il y a un traitement qui va en découler.
    Je pense que c'est possible de le faire hors de la requête en lisant le fichier et le modifiant mais j'ai peut que ça ajoute beaucoup de temps d'exécution.
    Est-ce qu-il y aurait une façon de faire?

    Sauf si je dois remplacer le 3 par 1 (stdout)?
    Merci

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    En vrac :


  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,
    Merci pour ta réponse.
    Le json_reformat est une commande bash à ce que j'ai compris.
    Les 10 première lignes du json sont enlevées car je besoin que des valeurs a partir de la 11 lignes pour faire des calculs.
    Concernant le type de timeout c'est une bonne question et pour être honnête je n'en sais rien.
    Après pour le pipe je ne vois pas comment je peux adapter le code que j'ai et qui marche bien pour reformater le json

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai en tête de faire qu'une seule commande parceque si je fais 2 commandes avec les curls la première peut très bien fonctionner mais la deuxième tomber en timeout c'est pour ça que le code initial était intéressant

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Citation Envoyé par flash026 Voir le message
    je veux récupérer le code retour http
    qu'appelles-tu "code de retour http" ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Socket bloquante + redirection
    Par dvp_zero dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/03/2010, 20h21
  2. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43
  3. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36
  4. SendMessage bloquant l'exécution du programme
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 03/05/2003, 19h26
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo