我一直在尝试使用“对话框”实用程序来构建交互式菜单。如果我在终端上工作,一切正常;显示菜单,我可以使用键盘从这些菜单进行交互。
但现在我希望另一个设备作为输出的目的地,另一个设备(键盘/指针)为对话框提供输入。
从我现有的 TTY (/dev/console) 运行对话框并将输出重定向到 /dev/tty0。菜单显示在 tty0 上;但我现在希望从启动对话脚本的终端驱动输入。这似乎不起作用。
那么我能否确保现有的 TTY 提供对话框的输入,然后如何从非 TTY 设备的设备将事件注入到对话框中。我能否以某种方式将字符序列回显到对话框中,或者问题是它需要一个行为类似于 TTY 的真实设备,包括所有 TTY ioctl?
输入的简单重定向似乎不起作用?
答案1
我的dialog
命令需要一个--input-fd
选项来说明从哪里读取。例如,在一种终端类型中tty
查找它正在使用,例如,/dev/pts/4
然后将其设置为不进行任何读取:
stty -icanon && sleep 1000
在另一个终端启动
dialog --yesno 'shall we answer yes?' 0 0 --input-fd 3 3</dev/pts/4
那么在第一个终端中输入的任何内容都会影响对话框。
中断睡眠并键入stty icanon
以恢复第一个终端。