#1 Le 24/07/2017, à 22:13
- Compte supprimé
[Résolu] Récupération valeur tableau impossible à cause du pipe
Bonjour
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 Compte supprimé (Le 29/07/2017, à 23:31)
#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
- Compte supprimé
Re : [Résolu] Récupération valeur tableau impossible à cause du pipe
Merci à vos 2 pour vos solutions qui fonctionnent.
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 Compte supprimé (Le 26/07/2017, à 17:45)
#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.
En ligne
#6 Le 26/07/2017, à 18:02
- Compte supprimé
Re : [Résolu] Récupération valeur tableau impossible à cause du pipe
Salut Watel
Merci pour ta réponse mais non ça fonctionne toujours pas
#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
- Compte supprimé
Re : [Résolu] Récupération valeur tableau impossible à cause du pipe
Cette fois ça marche !!!
Merci pingouinux, kholo et Watael pour m'avoir donner un coup de pouce pour résoudre ce problème!
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 Compte supprimé (Le 29/07/2017, à 23:32)