有没有办法检查在后台运行的 shell 脚本中是否按下了特定键。假设我正在运行一个 shell 脚本,当我按下一个键或 2 个或 3 个键的组合时,该脚本必须立即播放歌曲的播放列表。该 shell 脚本将被添加到 crontab 中,因此它不会在终端中运行。那么这个shell脚本中是否可以捕获按下的按键呢?
答案1
你的要求不是很清楚。但如果我理解正确的话,我建议你先尝试一下autokey-gtk
。它是一个基于 Python 的应用程序,您可以在其中用 Python 编写脚本,只要您按下一组预定义的键,脚本就会执行。看看这是否符合您的需求。
那么,如果你想手动完成,基本上有两种方法:
解决方案#1:键盘记录方法
您可以编写一个脚本,该脚本将继续记录键盘按键并在按下特定组合时启动事件。对于记录键,您可以查看以下代码py键盘记录器。
解决方案#2:Keybinder 方法
首先,您需要使用某种方法绑定您的密钥。其中一种方法是使用钥匙夹。或者您可以简单地使用设置中的“键盘快捷键”绑定按键。现在,每当您按下一组特定的键时,就会运行一个脚本,该脚本会将一些文本写入您的主文件夹中的某个 XYZ 文件中。
在后台,使用 crontab 启动的脚本将每 1 秒读取此 XYZ 文件。根据文件的内容,该脚本将启动不同的操作。
答案2
正常情况下,只有获得焦点的应用程序才会收到按键事件。我们谈论的是具有图形环境的桌面系统,不是吗?
您可以从桌面环境捕获事件,这会略有不同,具体取决于您是否运行 gnome、kde、xfce 或其他环境,但通常这些环境带有热键处理程序,可以从常规设置应用程序访问,搜索键盘、热键等。
从那里您可以确定您的应用程序 PID,在后台运行,在后台运行,通过mypid=$(pidof myscript.sh)
.然后您可以将用户信号(SIGUSR1、SIGUSR2 - 请参阅man 7 signal
)发送到您的脚本(请参阅man kill
,是的,真的,您可以使用发送友好信号kill
),可以更改脚本来处理此类信号。但在我看来,从 crontab 启动脚本、等待按键并处理该信号过于复杂。更简单:直接从热键启动脚本。
现在告诉我们您的桌面环境,如果没有找到设置,请更改您的组合键。