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
変数でwhileループ全体をキャプチャする必要があるため、元のコードは機能しませんでした。
次のスニペットを試してください。
#!/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"
1つのオプションは、おそらくbash配列を使用して、入力リストの構築と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
を保存および復元する必要がないことに注意してください。