Obter variável da lista do Zenity gerada a partir do arquivo .csv

3

Estou tentando obter o valor da zenity list. Mas isso não funciona. Alguma ajuda seria legal :)

Se eu remover o ans=$ , obtenho o valor de zenity no terminal da seguinte forma:

10.33.54.13|10.33.54.13

Mas não sei como fazer uma variável a partir da saída do 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
    
  • Código:

    #!/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"
    
por Andre 30.07.2015 / 13:17

3 respostas

3

Seu código original não funcionou porque você tem que capturar todo o loop while na variável ans .

Experimente o seguinte snippet:

#!/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"
    
por Sylvain Pineau 30.07.2015 / 14:07
1

Eu acho que você só quer algo assim; ele armazenará a seleção em uma variável $var :

var="$(awk -F ';' '{print }' data.csv | zenity --list --text "Choose witch IP-address you want to connect to " --column "Choose" 2>/dev/null)"

    
por kos 30.07.2015 / 13:51
0

Uma opção é separar a construção da lista de entrada da execução do comando zenity, talvez usando um array bash, por exemplo.

#!/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"

Observe também que não é necessário salvar e restaurar IFS , pois você pode definir o IFS=\; personalizado na linha de comando read .

    
por steeldriver 30.07.2015 / 14:21

Tags