在bash中连续读取输入

时间:2012-02-17 16:58:50

标签: bash

我有一个简单的问题。我知道在递归和循环时,shell脚本很慢/无效。

通常,是否可以连续读取输入而不必循环读取/“抓取”部分代码,例如当输入连续且充足时(一种EVENT DRIVEN场景)。

例如, 我使用fedora16(gnome3.2),并且由于未知的原因,大写通知丢失了。我拥有一台上网本,没有指标LED的“奢侈品”。所以我决定编写一个shell脚本,以便在按下大写锁定键时通知我。我想出了一种了解关键状态的方法。

xset -q | grep Caps | awk '{print $4}'

这会给我“开”/“关”作为输出。我可以让循环每秒执行一次(或更少)但这将是一种非常粗暴的方式。

1 个答案:

答案 0 :(得分:1)

你写的是事件驱动的。 xset -q产生一些输出,仅在grep消耗该输出时(即产生它时)。此时,grep可能会产生一些输出(仅当它与Caps匹配时),并且仅在这种情况下awk会处理某些内容。

这里的问题不是bash - “问题”是xset -q。它不是为了不断提供输出而设计的。它被设计为一次性输出命令。

要触摸问题的其他部分 - 如果您确实需要一个指标,请查看此处:

各种指标的绝佳来源。其中一个是Keylock指标(搜索上面的页面以查看更多信息):

Keylock indicator

以上链接来自askubuntu.com,即它是以Ubuntu为中心的,但上面似乎也适用于Fedora:

从上面的帖子(this post几个):

su -
yum install lock-keys-applet
exit
killall -HUP gnome-panel

希望这有帮助。