Linux
為什麼以下 osd_cat 腳本會失敗?
我正在編寫一個
osd_cat
基於簡單的實用程序來顯示通過 libpurple 收到的消息(例如,通過 Finch 或 Pidgin)。到目前為止,這是我設法創建的:
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '/string/ && (NR%2==1) {split($0, sender, "\"") }; /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }' | osd_cat --pos=top --align=right --indent=8 -O 4 -u white
或分成多行以增強閱讀樂趣:
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '/string/ && (NR%2==1) {split($0, sender, "\"") }; /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }' | osd_cat --pos=top --align=right --indent=8 -O 4 -u white
我做了一些實驗,發現以下工作:
yes | osd_cat echo "text" | osd_cat dbus-monitor | osd_cat dbus-monitor | awk '{print $0}' | osd_cat dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | osd_cat
但以下不起作用:
dbus-monitor | awk '{print $1 $2}' | osd_cat dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '{print $0}' |osd_cat
我完全迷路了。
老問題,但對於Google人來說:
我遇到了類似的問題,但規模要簡單得多。我只是想做
echo "Some string\nWith a bunch of chars" | osd_cat
我發現 osd_cat 似乎存在一些問題,要麼是延遲檢測 OSD 機制的可用性,要麼是輸入緩衝問題。
如果輸入字元串太長(在我的系統上它在 7 到 11 個可列印字元之間變化),它將掛起延遲時間,然後退出而不顯示任何內容。
如果我使用
--wait
osd_cat 選項,我的問題就消失了。然而,副作用是消息可能需要超過 5 秒才能出現(在我的系統上)。您為 osd_cat 指定的任何延遲時間僅在消息至少可見時才開始,但這可能意味著要在預設 5 秒內顯示的消息將需要 5 秒才能顯示,然後在消失之前再顯示 5 秒。
在相關的說明中,這似乎也是所有建構在 osd_cat 之上的工具的問題,並且沒有一個可以解決這個問題。原作者的這些工具列表在他的頁面上(在 osd_cat 的手冊頁上列出):http://ignavus.net/xosd這
包括更常見的
osdsh
,這是我試圖找到的替代方法因為,當我偶然發現osd_cat
.