#1 Le 24/10/2019, à 22:55
- Tohubohu
[RÉSOLU] Un 'pipe' qui s'invite…
Bonjour à tous
Ça sera sûrement une évidence pour certain⋅e d'entre vous mais de mon côté je ne comprends pas. Si vous voulez bien m'éclairer.
Voici une partie d'un p'tit script :
#!/bin/bash
key=$( yad --width=300 --posx=600 --posy=80 --title="" \
--window-icon="pirate.png" --image="pirate(64x64).png" \
--text="Mot(s) à rechercher :" \
--form --field="" )
Comme prévu, une fenêtre s'ouvre et j'entre un mot dans le champ à disposition, par exemple ubuntu.
Mais si j'affiche la variable key avec un echo $key, ça me renvoie ubuntu| ! Il y a bien un pipe qui s'ajoute et je ne sais pas d'où il sort.
Vous avez une idée s'il vous plaît ?
Dernière modification par Tohubohu (Le 28/10/2019, à 18:43)
« C'est en voyant un moustique se poser sur ses testicules qu'on réalise qu'on ne peut pas régler tous les problèmes par la violence. »
VOYAGER X8 Debian Jessie
Hors ligne
#2 Le 25/10/2019, à 06:29
- DonutMan75
Re : [RÉSOLU] Un 'pipe' qui s'invite…
Bonjour,
apparemment c'est le comportement normal : https://doc.ubuntu-fr.org/yad_yet_anoth … _multiples
Donut
Hors ligne
#3 Le 25/10/2019, à 12:14
- Christophe C
Re : [RÉSOLU] Un 'pipe' qui s'invite…
pour Yad, le retour sur une page de formulaires --form, c'est un champs composé de valeurs séparées par un pipe pour le retour de chaque ligne --field
Si tu as :
--field="coucou":LBL
--field="comment":LBL
--field="allez-vous ?":LBL
Tu auras un retour => ||||
Les 3 champs (entre les pipe) sont vides (puisqu'on ne demande rien sur un LBL). Le champs entre les pipes sera par contre remplis s'il est le produit d'une ligne de saisie ou de sélection (genre CBE)
Donc ensuite il faut exploser le string (je voulais la placer depuis longtemps, celle-là). Perso je fais :
ANC_IFS="$IFS" #je stock le séparateur par défaut de la variable interne $IFS
IFS='|' #je redéfinie la variable interne $IFS (qui gère les séparateurs par défaut d'un tableau) avec un pipe
read -ra TableauRetour <<< "$key" #j'envoie la chaine des retours Yad ($key dans ton exemple) dans une variable de tableau TableauRetour
IFS="$ANC_IFS" #je remets la variable interne $IFS à sa valeur originelle.
#
Champs1=${TableauRetour[0]} #J'affecte la 1er valeur du tableau dans une variable Champs1
Champs2=${TableauRetour[1]} #J'affecte la 1er valeur du tableau dans une variable Champs2
Champs3=${TableauRetour[2]}
Bien sur, tu ne récupères que les variables Champx qui t'intéressent, par exemple la ligne --field N°6 et la 12, si ce sont les seules avec une entrée.
Si les autres champs sont des libellés (LBL), tu les ignores (puisqu'ils seront vides).
Dernière modification par Christophe C (Le 25/10/2019, à 12:25)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#4 Le 25/10/2019, à 13:34
- kamaris
Re : [RÉSOLU] Un 'pipe' qui s'invite…
Avec la commande read, on peut se dispenser de la sauvegarde / restauration de l'IFS en faisant simplement
IFS='|' read -ra TableauRetour <<< "$key"
L'IFS ne sera modifié que pour l'exécution de read, et read prendra bien en compte cette modif.
Dernière modification par kamaris (Le 25/10/2019, à 15:52)
Hors ligne
#5 Le 25/10/2019, à 15:16
- Christophe C
Re : [RÉSOLU] Un 'pipe' qui s'invite…
Tiens, c'est marrant. Ok, merci de l'info
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#6 Le 28/10/2019, à 18:42
- Tohubohu
Re : [RÉSOLU] Un 'pipe' qui s'invite…
Merci à tous pour vos retours
Déjà, je comprends mieux d'où vient le pipe, merci DonutMan75
E je vous ai fait chercher pour rien car j'ai besoin que d'une seule saisie en fait et c'est l'argument --entry que je dois utiliser (et pas --form). J'ai survolé la doc trop vite, je suis désolé.
Il suffit juste de :
#!/bin/bash
key=$( yad --width=300 --posx=600 --posy=80 --title="" \
--window-icon="pirate.png" --image="pirate(64x64).png" \
--text="Mot(s) à rechercher :" \
--entry )
Mais je garde sous le coude vos solutions Christophe et kamaris pour un prochain coup.
Encore merci
« C'est en voyant un moustique se poser sur ses testicules qu'on réalise qu'on ne peut pas régler tous les problèmes par la violence. »
VOYAGER X8 Debian Jessie
Hors ligne