다음 osd_cat 스크립트가 실패하는 이유는 무엇입니까?

다음 osd_cat 스크립트가 실패하는 이유는 무엇입니까?

저는 osd_catlibpurple(예: 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

나는 완전히 길을 잃었습니다.

답변1

오래된 질문이지만 Google 직원을 위한 질문입니다.

비슷한 문제가 있었지만 훨씬 간단한 규모입니다. 난 그냥 하고 싶어

echo "Some string\nWith a bunch of chars" | osd_cat

나는 osd_cat에 OSD 메커니즘 가용성 감지의 지연이나 입력 버퍼링 문제 등 몇 가지 문제가 있는 것 같다는 것을 발견했습니다.

입력 문자열이 너무 길면(내 시스템에서는 인쇄 가능한 문자가 7~11자 사이임) 지연된 후 아무것도 표시되지 않고 종료됩니다. osd_cat 옵션을

사용하면 문제가 사라집니다. 그러나 부작용은 메시지가 나타나는 데 5초 이상 걸릴 수 있다는 것입니다(내 시스템에서는). osd_cat에 대해 지정한 지연은 메시지가 표시될 때만 시작됩니다. 그러나 이는 기본적으로 5초 동안 표시되는 메시지가 표시되는 데 5초가 걸리고 사라지기까지 5초가 더 걸린다는 것을 의미할 수 있습니다. 관련 메모에서 이것은 osd_cat 위에 구축된 모든 도구의 문제인 것으로 보이며 그 중 누구도 이를 설명할 수 없습니다. 원저작자가 제공한 도구 목록은 그의 페이지에 있습니다(osd_cat의 매뉴얼 페이지에 나열되어 있음).--wait


http://ignavus.net/xosd
여기에는 보다 일반적인 것들이 포함됩니다 osdsh. 이것이 제가 우연히 발견했을 때 호출될 때 간헐적으로 아무것도 표시하지 않기 때문에 대안을 찾으려고 노력하는 이유입니다 osd_cat.

관련 정보