我正在尝试从列表中获取值zenity
。但是它不起作用。如果能得到一些帮助就好了 :)
如果我删除,我将从终端获取如下ans=$
值:zenity
10.33.54.13|10.33.54.13
但我不知道如何从终端输出中创建变量。
数据.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"
答案1
您的原始代码不起作用,因为您必须在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"
答案2
答案3
一种选择是将输入列表的构造与 zenity 命令的运行分开,也许使用 bash 数组,例如
#!/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