![bash 脚本 - 通过 gui 请求输入](https://linux22.com/image/178298/bash%20%E8%84%9A%E6%9C%AC%20-%20%E9%80%9A%E8%BF%87%20gui%20%E8%AF%B7%E6%B1%82%E8%BE%93%E5%85%A5.png)
我目前正在 bash 中编写 nemo 操作脚本,我需要一种方法来获取用户的输入。
如何?运行操作脚本时终端不显示。
有没有办法在 GUI 中弹出一个查询窗口来要求用户输入?
答案1
Zenity 是一个很好的工具。
user_input=$(zenity --entry)
无论用户在 GUI 窗口中键入什么内容,都会将其分配给变量user_input
,除非用户按下取消键,在这种情况下退出代码不为零。
user_input=$(zenity --entry)
if [ $? = 0 ]; then
echo "User has pressed OK. The input was:"
echo "$user_input"
else
echo "User has pressed cancel"
fi
Gxmessage 是一种替代方案,具有非常相似的语法。
user_input=$(gxmessage --entry "Enter your input")
更多信息请参见man zenity
和man gxmessage
。
答案2
- 如果您想留在 shell 中,请使用
dialog
(几乎每个发行版都已经默认安装了它)。
在使用它之前,请阅读联机帮助页,以便您可以将其配置为完全执行您想要的操作。一个小例子:
dialog --inputbox "Please input something" 0 0 2> /tmp/file_that_will_contain_your_input
- 如果想要出现 X11 窗口,请查看 xdialog。但我建议留在 shell 中:
编写部分使用 X11 和部分使用控制台的脚本会带来问题,但不会获得任何优势。出于兼容性原因,
的语法xdialog
与 的语法几乎相同。dialog
因此,如果您在上面的示例前面放置 ,x
它会执行完全相同的操作,但会使用 X11 窗口。再次,请查看联机帮助页以获取更多信息。