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 24/10/2019, à 22:55

Tohubohu

[RÉSOLU] Un 'pipe' qui s'invite…

Bonjour à tous smile

Ç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 smile


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 wink

Déjà, je comprends mieux d'où vient le pipe, merci DonutMan75 smile
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 wink


« 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