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/07/2017, à 22:13

Slyfox

[Résolu] Récupération valeur tableau impossible à cause du pipe

Bonjour smile

Voici un script:

#  /bin/bash

function CPT()
{
sleep 0.5
tab=(${tab[@]} 0)
echo "20"

sleep 0.5
tab=(${tab[@]} 1)
echo "40"

sleep 0.5
tab=(${tab[@]} 2)
echo "60"

sleep 0.5
tab=(${tab[@]} 3)
echo "80"

sleep 1
echo "100"
tab=(${tab[@]} 4)
}

CPT
echo "${tab[@]}"

Retourne: 20
40
60
80
100
0 1 2 3 4

Maintenant j'ai envie d'ajouter une fenêtre graphique via yad (à installer si nécessaire) pour faire plus joli, voilà le script:

#  /bin/bash

function CPT()
{
sleep 0.5
tab=(${tab[@]} 0)
echo "20"

sleep 0.5
tab=(${tab[@]} 1)
echo "40"

sleep 0.5
tab=(${tab[@]} 2)
echo "60"

sleep 0.5
tab=(${tab[@]} 3)
echo "80"

sleep 1
echo "100"
tab=(${tab[@]} 4)
}

CPT | yad --progress --auto-kill --auto-close 
echo "${tab[@]}"

Et là c'est le mini trame plus de retour.
Si j'ai bien compris le pipe | crée un sous script (?) mais comment faire pour récupérer les valeurs de mon tableau ???

Merci de votre aide.

Dernière modification par Slyfox (Le 29/07/2017, à 23:31)

Hors ligne

#2 Le 25/07/2017, à 06:58

pingouinux

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

Bonjour,
Tu peux utiliser un fichier provisoire :

#  /bin/bash

function CPT()
{
...............
sleep 1
echo "100"
tab=(${tab[@]} 4)
echo "${tab[@]}" >/tmp/mon_tab
}

CPT | yad --progress --auto-kill --auto-close
tab=$(cat /tmp/mon_tab)
echo "${tab}"
rm /tmp/mon_tab

Ajouté :
Si tu veux récupérer la structure de tableau (mais ça ne marche que si les éléments du tableau ne contiennent pas d'espaces) :

tab=($(cat /tmp/mon_tab))
echo "${tab[@]}"

Dernière modification par pingouinux (Le 25/07/2017, à 07:31)

Hors ligne

#3 Le 25/07/2017, à 08:56

kholo

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

la même chose que pingouinux
mais qui prends les espaces :

#!/bin/bash

function CPT()
{
sleep 0.5
tab+=( 0 )
echo "# tab = 20"
echo "20"

sleep 0.5
tab+=( 1 )
echo "# tab = 40"
echo "40"

sleep 0.5
tab+=( 2 )
echo "# tab = 60"
echo "60"

sleep 0.5
tab+=( 3 )
echo "# tab = 80"
echo "80"

sleep 1
tab+=( 4 )
echo "# tab = 100"
echo "100"

for i in ${tab[@]}
do
	echo "$i" >>/tmp/mon_tab
done
}
CPT | yad --progress --auto-kill --auto-close
IFS=$'\n' tab=( $(cat /tmp/mon_tab) )

# echo "${tab[@]}"

for i in ${tab[@]}
do
	echo "valeur = $i"
done

rm /tmp/mon_tab

exit 0

Hors ligne

#4 Le 26/07/2017, à 17:35

Slyfox

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

Merci à vos 2 pour vos solutions qui fonctionnent. cool

Par contre j'ai un peu modifié le script et là j'ai encore un problème, voici le script:

function CPT()
{
sleep 0.5
tab+=( --field="Valeur:sans_espace":LBL )
echo "20"

sleep 0.5
tab+=( --field="Valeur: avec espace":LBL )
echo "50"

sleep 1
echo "100"

for i in ${tab[@]}
do
	echo "$i" >>/tmp/mon_tab
done
}

CPT | yad --progress --auto-kill --auto-close

tab=( $(cat /tmp/mon_tab) )

rm /tmp/mon_tab

# Nouvelle fenêtre yad
yad --form ${tab[@]}

exit 0

En gros la fonction CPT me crée les lignes de commandes pour me construire une nouvelle fenêtre yad en fin de script.
Tout fonctionne sauf --field="Valeur:avec espace":LBL car il y a un espace et c'est là que je n'arrive pas à résoudre ce problème.

EDIT
Voici comment la nouvelle fenêtre yad devrai s'afficher:

yad --form --field="Valeur:sans_espace":LBL --field="Valeur: avec espace":LBL

Dernière modification par Slyfox (Le 26/07/2017, à 17:45)

Hors ligne

#5 Le 26/07/2017, à 17:57

Watael

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

tab=($(cat /tmp/mon_tab))

mais, non !

readarray -t tab </tmp/mon_tab

non, mais !


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 26/07/2017, à 18:02

Slyfox

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

Salut Watel

Merci pour ta réponse smile mais non ça fonctionne toujours pas sad

Hors ligne

#7 Le 26/07/2017, à 18:04

pingouinux

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

Essaye en modifiant les lignes 14 et 22 :

Ligne 14

for i in "${tab[@]}"

Ligne 22

IFS=$'\n' tab=( $(cat /tmp/mon_tab) )

La ligne 27 sera peut-être aussi à modifier.

Hors ligne

#8 Le 26/07/2017, à 18:47

Slyfox

Re : [Résolu] Récupération valeur tableau impossible à cause du pipe

Cette fois ça marche !!! cool

Merci pingouinux, kholo et Watael pour m'avoir donner un coup de pouce pour résoudre ce problème! smile

Voici le script:

#!/bin/bash
 

function CPT()
{
sleep 0.5
tab+=( --field="Valeur:sans_espace":LBL )
echo "20"

sleep 0.5
tab+=( --field="Valeur: avec espace":LBL )
echo "50"

sleep 1
echo "100"

for i in "${tab[@]}"
do
	echo "$i" >>/tmp/mon_tab
done
}

CPT | yad --progress --auto-kill --auto-close

IFS=$'\n' 

tab=( $(cat /tmp/mon_tab) )

rm /tmp/mon_tab

# Nouvelle fenêtre yad
yad --form ${tab[@]}

exit 0

Dernière modification par Slyfox (Le 29/07/2017, à 23:32)

Hors ligne