Das hat jetzt nix mit dem VDR zu tun, aber mit Scripting, und da seid ihr ja fit hier!?
Ich habe unter Ubuntu 12.4 (und vorher Debian) seit Jahren ein Script laufen, das nun unter Ubuntu 14.4 nicht mehr will. Dabei wird eine spezielle USB-IO-Karte über ein pseudo serielles Device angesprochen. Man schreibt Zeichenketten der Form ~<Befehl>~ hin und bekommt eine Antwort ~<Ergebnis>~, dabei kein Zeilenumbruch (wird bein schreiben ignoriert, zurück kommt also quasi ein immer länger werdender String). Ok, so sah das (verkürzt) aus:
#!/bin/bash
DEV=/dev/serial/by-id/usb-Microchip_Technology_Inc._CDC_RS-232_Emulation_Demo-if00 # /dev/ttyACM1
myio() {
{
stty -icanon -echo
echo "~$1~"
read -s -e -t 1 -d '~' myio
read -s -e -t 1 -d '~' myio
} <"$DEV" >"$DEV"
}
myio "DS0"
echo "$myio"
Alles anzeigen
Wenn man das mit bash -x laufen lässt sieht man, dass er beim read hängen bleibt (was wegen 1s timeout eigentlich nicht geht. Jetzt fragt mich nicht, was das mit dem stty usw. sollte, jedenfalls hat es funktioniert.
Prinzipiell geht die Kommunikation auch noch, und zwar wenn ich in Konsole A
und dann in Konsole B
^
kommt in Konsole A die gewünschte Antwort.
Ok, also wieder als Script...
#!/bin/bash
DEV=/dev/serial/by-id/usb-Microchip_Technology_Inc._CDC_RS-232_Emulation_Demo-if00 # /dev/ttyACM1
myio() {
{
echo "~$1~"
read -t 10 -d '~'
read -t 1 -d '~' myio
} <"$DEV" >"$DEV"
}
myio "DS0"
echo $myio
Alles anzeigen
...nix! Geht einfach (nach timeout) über die reads.
Wie kriege ich das wieder hin? Von mir aus auch in Perl oder C.
Es ist wichtig, dass die Leseseite schon geöffnet ist, bevor der Befehl geschrieben wird, ansonsten landet die Antwort im Nirvana. Ich habe auch schon versucht das echo (mit sleeps usw.) abzuforken u.ä., aber es hilft nichts...