Script sh qui reçoit le STDOUT d'une commende suite à un PIPE du terminal
Résolu/Fermé
A voir également:
- Script sh qui reçoit le STDOUT d'une commende suite à un PIPE du terminal
- Commande terminal mac - Guide
- Script vidéo youtube - Guide
- Recoit on les message apres deblocage ✓ - Forum iPhone
- Fichier sh - Forum Shell
- Microsoft activation script - Accueil - Windows
3 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
7 avril 2019 à 19:42
7 avril 2019 à 19:42
Salut,
Quelle distribution utilises-tu ?
Quel est ton shell ?
Quel shebang emploies-tu pour ton script ?
Pour info, sous Debian, Ubuntu et dérivés,
C'est mon premier script en shAttention à l'abus de langage en shell sous GNU/Linux ;-\
sh ≠ bash;-\
Quelle distribution utilises-tu ?
Quel est ton shell ?
Quel shebang emploies-tu pour ton script ?
Pour info, sous Debian, Ubuntu et dérivés,
/bin/shest un lien symbolique vers
/bin/dash.
$ readlink -f /bin/sh
/bin/dash
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
7 avril 2019 à 19:47
7 avril 2019 à 19:47
salut,
pourquoi ne pas utiliser
readne lit qu'une ligne.
forne lit pas des lignes, mais des mots.
xxdne reçoit aucune donnée à lire.
pourquoi ne pas utiliser
xxddans les deux sens (conversion/reconversion) ?
bonjour IEprofSonDkon
Oulàlà! je suis loin de la solution!!
merci pour les explications ,et pour le hexdump on est obligé de l'utiliser tel que mentionné
$ hexdump fichier | ./hex2c -h -
Mais comment ont fait alors pour envoyer au script le résultat d'une commande pour qu'il puisse le lire et le traiter?
Pourtant quad je demande de lire $ligne il lit bien ce qui reçu non?
merci !!!
Oulàlà! je suis loin de la solution!!
merci pour les explications ,et pour le hexdump on est obligé de l'utiliser tel que mentionné
$ hexdump fichier | ./hex2c -h -
Mais comment ont fait alors pour envoyer au script le résultat d'une commande pour qu'il puisse le lire et le traiter?
Pourtant quad je demande de lire $ligne il lit bien ce qui reçu non?
merci !!!
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
>
BillyV33
8 avril 2019 à 03:48
8 avril 2019 à 03:48
readlit une ligne; une seule.
pour lire plusieurs lignes, il faut lire tant qu'on peut ;)
while read line; do echo "$line"; done
la sortie de hexdump comporte deux types de colonnes sur chaque ligne :
la première affiche la position du premier caractère de la ligne en cours (de l'affichage, pas du fichier)
les colonnes suivantes, elles affichent les caractères du fichier.
il faut donc traiter différemment ces deux types de colonnes.
comme tu l'as remarqué, les données des "colonnes caractères" sont inversées.
la première peut être affichée telle quelle, alors que la deuxième doit voir ces composantes inversées, deux par deux.
par exemple,
3033doit devenir
3330, pour que
xxdretourne
30.
dashne sait pas faire ça tout seul, ou simplement avec des commandes externes (typiquement les commandes de
coreutils).
dashest une obligation ?
Bonsoir IEprofSonDkon
WOW! je vais regarder le tout avec beaucoup d’intérêt demain PM.
il est 23h chez moi et demain je travail très tôt
mais ce qui est obligatoire c'est soit on utilise #!/bin/sh soit #!/bin/bash mais 'a priori on devrait plus utiliser le sh
mais je peux le faire en bash mais je dois m'assurer que tout mon script fonctionne ... il n'est pas long! :)
encore merci beaucoup!!
WOW! je vais regarder le tout avec beaucoup d’intérêt demain PM.
il est 23h chez moi et demain je travail très tôt
mais ce qui est obligatoire c'est soit on utilise #!/bin/sh soit #!/bin/bash mais 'a priori on devrait plus utiliser le sh
mais je peux le faire en bash mais je dois m'assurer que tout mon script fonctionne ... il n'est pas long! :)
encore merci beaucoup!!
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
>
BillyV33
Modifié le 8 avril 2019 à 15:13
Modifié le 8 avril 2019 à 15:13
comme le suggère mon pseudo, je ne suis pas convaincu que les personnes qui donnent des exercices de codage shell connaissent elles-mêmes les subtilités d'appel à
entre autre.
/bin/sh...
entre autre.
bonsoir IEprofSonDkon
enfin de retour! j'ai beaucoup réfléchi sur tout ce que tu m'as donné et j'ai trouvé la solution !
la voilà
#--------------------------------------------------------------------------------------------
#MODE HEXDUMP $ hexdump fichier.txt | ./hex2c.sh -h -
#--------------------------------------------------------------------------------------------
.......c'est la suite de mon script.sh
elif [ "$1" = "-h" -a "$2" = "-" ]; then
# echo "conversion arriere avec xxd -ps -r: ";
ligne=$(sed -E "s/ /: /g;s/ (..)(..)/ \2\1/g" | cut -c10- | xxd -ps -r)
echo "$ligne";
.....
Substitution de commandes pour exécuter une commande et enregistrer son résultat dans une variable:
ligne=$(sed -E "s/ /: /g;s/ (..)(..)/ \2\1/g" | cut -c10- | xxd -ps -r)
--------------------------------------------------------------------------------------------
Reçoit:
$ hexdump fichier.txt
0000000 3033 3320 2031 3733 3220 2030 3134 3420
0000010 2031 3134 3220 2030 4130 000a
000001b
Explication cmd sed:
remplace les <espaces> par des <:espace> pour tout.
je concatène une deuxième commande sed qui
inverse la position de chaque groupe de paire de caractères avec <espace(gr2)(gr1)
cut -c10- prend tout ce qui vient a partir du 10eme caractère jusqu’à la fin et
xxd -ps -r fait la conversion inverse de ce qui a reçu du format hexdump fichier.txt
Affiche:
30 31 37 20 41 41 41 20 0A (qui est le contenu du fichier.txt avant la conversion avec hexdump)
--------------------------------------------------------------------------------------------
Encore merci infiniment pour aide! ça été dur mais j'y suis arrivé! :):)
je vais sûrement revenir bientôt pour d'autres questions !
bonne soirée!!!
enfin de retour! j'ai beaucoup réfléchi sur tout ce que tu m'as donné et j'ai trouvé la solution !
la voilà
#--------------------------------------------------------------------------------------------
#MODE HEXDUMP $ hexdump fichier.txt | ./hex2c.sh -h -
#--------------------------------------------------------------------------------------------
.......c'est la suite de mon script.sh
elif [ "$1" = "-h" -a "$2" = "-" ]; then
# echo "conversion arriere avec xxd -ps -r: ";
ligne=$(sed -E "s/ /: /g;s/ (..)(..)/ \2\1/g" | cut -c10- | xxd -ps -r)
echo "$ligne";
.....
Substitution de commandes pour exécuter une commande et enregistrer son résultat dans une variable:
ligne=$(sed -E "s/ /: /g;s/ (..)(..)/ \2\1/g" | cut -c10- | xxd -ps -r)
--------------------------------------------------------------------------------------------
Reçoit:
$ hexdump fichier.txt
0000000 3033 3320 2031 3733 3220 2030 3134 3420
0000010 2031 3134 3220 2030 4130 000a
000001b
Explication cmd sed:
remplace les <espaces> par des <:espace> pour tout.
je concatène une deuxième commande sed qui
inverse la position de chaque groupe de paire de caractères avec <espace(gr2)(gr1)
cut -c10- prend tout ce qui vient a partir du 10eme caractère jusqu’à la fin et
xxd -ps -r fait la conversion inverse de ce qui a reçu du format hexdump fichier.txt
Affiche:
30 31 37 20 41 41 41 20 0A (qui est le contenu du fichier.txt avant la conversion avec hexdump)
--------------------------------------------------------------------------------------------
Encore merci infiniment pour aide! ça été dur mais j'y suis arrivé! :):)
je vais sûrement revenir bientôt pour d'autres questions !
bonne soirée!!!
8 avril 2019 à 01:04
Merci pour la précision :)
effectivement, je suis sous Debian 9 Stretch et mon Shell
billy@debian:~$ echo $SHELL
/bin/bash
billy@debian:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
billy@debian:~$ readlink -f /bin/sh
/bin/dash
Mon shebang est /bin/sh
Merci
.