J'essaie d'obtenir la valeur de la liste zenity
. Mais ça ne marche pas. Une aide serait bien :)
Si je supprime le ans=$
, j'obtiens la valeur de zenity
dans le terminal comme ceci:
10.33.54.13|10.33.54.13
Mais je ne sais pas comment créer une variable à partir de la sortie du terminal.
data.csv:
192.168.10.1;switch0;255.255.255.0;192.168.1
192.168.10.2;switch1;255.255.255.0;192.168.1
192.168.10.3;switc2;255.255.255.0;192.168.1
Code:
#!/bin/bash
INPUT=data.csv
OLDIFS=$IFS
IFS=";"
while read IP hostname subnetmask gateway
do
echo -e "$IP"
done < $INPUT|ans=$(zenity --list --text "Choose witch IP-address you want to connect to " --column "Choose")
echo "You chose: $ans"
Votre code d'origine n'a pas fonctionné car vous devez capturer la boucle while entière dans la variable ans
.
Essayez l'extrait suivant:
#!/bin/bash
INPUT=data.csv
OLDIFS=$IFS
IFS=";"
ans=$(while read IP hostname subnetmask gateway
do
echo -e "$IP"
done <$INPUT|zenity --list --text "Choose witch IP-address you want to connect to " --column "Choose")
echo "You chose: $ans"
Une option consiste à séparer la construction de la liste d'entrée de l'exécution de la commande zenity, en utilisant éventuellement un tableau bash, par exemple.
#!/bin/bash
infile="data.csv"
declare -a iplist
while IFS=\; read -r IP hostname subnetmask gateway; do
iplist+=("$IP")
done < "$infile"
ans="$(zenity --list \
--text "Choose which IP-address you want to connect to " \
--column "Choose" "${iplist[@]}")"
echo "You chose: $ans"
Notez également qu'il n'est pas nécessaire de sauvegarder et de restaurer IFS
, car vous pouvez définir le personnalisé IFS=\;
sur la ligne de commande read
.