如何在zenity中获取不同形式的值

use*_*014 3 bash shell zenity

我想在zenity中获取表单的值(用户编写的Ipaddress值)以便使用ffmpeg进行一些视频流,我尝试了几个例子,如列表,表单,等等

zenity --forms --title="Add Friend" --text="Enter Multicast address" --separator="," --add-entry="IP address" --add-entry="PORT" 
Run Code Online (Sandbox Code Playgroud)

要么

if zenity --list --title="Record Video Stream"  --text "Enter the Multicast IP address and port of each of the video stream" --column "Video IP" --print-column=2 --multiple --column "PORT" --editable ip="0.0.0.0" port="2002"
Run Code Online (Sandbox Code Playgroud)

Pet*_*esh 7

输出来自zenity输入的文本,由--separator字符分隔.退出代码是否被接受(即OK,Cancel被选中).

例如(在bash中):

OUTPUT=$(zenity --forms --title="Add Friend" --text="Enter Multicast address" --separator="," --add-entry="IP address" --add-entry="PORT")
accepted=$?
if ((accepted != 0)); then
    echo "something went wrong"
    exit 1
fi

ip=$(awk -F, '{print $1}' <<<$OUTPUT)
port=$(awk -F, '{print $2}' <<<$OUTPUT)
Run Code Online (Sandbox Code Playgroud)

这将获得从zenity到ip变量的ip地址和从zenity形式到port变量的端口.

第二个例子有点复杂,它使用'editable'模板,这意味着如果数据没有改变你就不会获得任何输出,但它遵循与前一个例子类似的模式.现在,因为你说--print-column=,它只在输出中显示该列.不幸的是,--list是从项目列表中选择一行或多行.编辑多行将起作用,但您必须选择每一行以获取该行的输出,即使在对数据进行更改之后也是如此.在这种情况下,因为您未指定该--separator选项,所以使用默认分隔符|.

在第二种情况下,使用可编辑和列表输入实际上并不是从用户输入角度设计列表的内容.