我写了一个脚本来调整窗口的大小,它需要分数形式的方向和值,像这样:
resize.sh -h 1/2
,它按预期工作。
我还添加了-k
标志,这意味着脚本需要用户输入,如下所示:
resize.sh -k -h
并在脚本中:
read -rsn 2 fraction
我解析以获得分子和分母的值。
这在命令行上很好用,但是其背后的思想是将resize.sh -k -h
绑定到某个组合键,并在后面跟随两个键作为输入。但是,当我从键盘运行脚本时,该脚本作为与任何tty无关的后台进程运行,因此read无法获得其输入。从键盘运行全局输入后,是否可以将全局输入重定向到后台进程。
到目前为止我尝试过的事情:
重定向到/ proc / $$ / fd / 0,该操作无效。
重定向g当前正在读取的tty stdin,如下所示:
read -rsn 2 fraction < /dev/pts/0
确实有效,但是问题在于并非所有窗口都是终端,例如网络浏览器。
如果我的问题不清楚,请随时要求其他澄清或详细信息,并预先致谢:)
答案 0 :(得分:0)
您可以使用命名管道进行过程通信。 我制作了一个示例脚本,其中后台进程是一个函数。
#!/bin/bash
pipe_name=/tmp/mypipe$$
mkfifo "${pipe_name}"
resize()
{
read fraction < "${pipe_name}"
echo "Resize window to fraction=${fraction}"
}
resize &
read -p "Enter your fraction: "
echo "${REPLY}" > "${pipe_name}"
rm "${pipe_name}"
答案 1 :(得分:0)
感谢你们俩提供了非常有用的信息。解决方案实际上是两者的结合。
首先,如Walter所建议,我修改了resize.sh中的read命令以从命名管道中获取输入,然后我编写了一个新的“包装器”脚本,该脚本在后台执行resize.sh,并且由于Barmar指出了我需要一个gui窗口,它会启动一个很小的终端窗口,该窗口运行读取并将输入传递给命名管道。此外,使用wmctrl,我设法将小终端窗口放置在当前活动窗口开始的位置,并将其隐藏在下面(由于openbox每个应用程序的属性),因此从技术上讲它根本不可见:)
按照我的喜好,它确实太笨拙,但这确实是我目前唯一能想到的选择,因此,在找到更好的方法之前,这可以完成工作。 再次感谢你们俩指导我寻求解决方案,我真的很感激,加油:)