Я пытаюсь получить значение от zenity
список. Но это не работает. Некоторая справка была бы хороша :)
Если я удаляю ans=$
Я получаю значение от zenity
в терминале как это:
10.33.54.13|10.33.54.13
Но я не знаю, как заставить переменную из терминала произвести.
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
Код:
#!/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"
Ваш исходный код не работал, потому что необходимо получить целый цикл с условием продолжения в ans
переменная.
Попытка следующий отрывок:
#!/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"
Одна опция состоит в том, чтобы разделить конструкцию входного списка от выполнения команды zenity, возможно, с помощью массива удара, например,
#!/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"
Также примечание, которое Вы не должны сохранить и восстановить IFS
, так как можно определить пользовательское IFS=\;
на read
командная строка.
Я предполагаю, что Вы просто хотите что-то вроде этого; это сохранит выбор в a $var
переменная:
var="$(awk -F ';' '{print $1}' data.csv | zenity --list --text "Choose witch IP-address you want to connect to " --column "Choose" 2>/dev/null)"