从 .csv 文件生成的 Zenity 列表中获取变量

从 .csv 文件生成的 Zenity 列表中获取变量

我正在尝试从列表中获取值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

我想你只是想要这样的东西;它会将选择存储在一个$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)"

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案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

相关内容