Sieh dir doch einfach mal den AS-Befehl "do shell script..." an.
(Das mit /bin/sh ausgeführte Skript wird zwischen Gänsefüsschen gestellt, darin enthaltene Gänsefüsschen und Backslashes müssen mit einem weiteren Backslash maskiert werden.)
Beispüle hier.
Ergebnis 1 bis 7 von 7
- 23.12.2011, 23:49 #1
AppleScript soll ein Terminal-Script unsichtbar ausführen
Hallo, öhm, ich meine *Weihnachtsmannbart ankleb* Ho Ho Ho zusammen!

(für alle, die das "Vorgeplänkel" überspringen möchten, runterscrollen bis zum Marker)
Folgende Ist-Situation:
* Mac Mini (OS 10.6.8) vorhanden
* dieser agiert primär als heimischer Media-Server
* zum Musikhören läuft der Logitech Media Server 7.7.0 als Zuspieler für meine Logitech Squeezeboxen auf dem Mini
* da der Mini eh im Wohnzimmer steht, wird dieser mit der Software SqueezeSlave (welche sich mehr oder weniger wie eine Hardware-Squeezebox verhält) zum Versorgen der angeschlossenen HiFi-Anlage betraut
So weit, so gut, läuft wie erwartet.
Zum Steuern der Musik benutze ich, je nach Situation, entweder die Logitech Media Server-Weboberfläche oder die App iPeng auf diversen iTouch-Geräten. Jetzt nenne ich auch eine Logitech Harmony (Universalfernbedienung) mein Eigen. Nun hatte ich die illustre Idee, mit jener Infrarot-Ferbedienung zumindest die rudimentären Abspielfunktionen (lauter, leiser, nächstes Lied, vorheriges Lied) zu steuern. Nichts leichter als das, dachte ich mir, Candelair und Remote Buddy installiert und eigene Behaviours programmiert. Funktioniert im Grunde auch ganz gut, nur mit einem kosmetischen Makel (und jetzt folgt auch die eigentliche Frage):
------------- MARKER ---------------
Meine Remote Buddy-Behaviours bestehen aus AppleScript-Schnippseln, welche via Telnet CLI-Strings an die Logitech-Software schicken. Diese funktionieren, nur öffnet sich immer ein Terminal-Fenster sichtbar auf dem Desktop, wenn die Behaviour-Aktion getriggert wird. Diese "visuelle Rückmeldung" würde ich gerne vermeiden.
Der Quelltext sieht ähnlich wie folgt aus:
Jegliche Versuche mitCode:set telnet to "telnet 127.0.0.1 9090 00%3A00%3A00%3A00%3A00%3A01 playlist index +1 exit" tell application "Terminal" run do script telnet delay 0.2 close quit end tell
das Terminal-Fenster nach dem Starten des Terminals zu verstecken als auch das Terminal über ein Mutter-Prozess direkt unsichtbar zu startenCode:set visible to false
führen dazu, dass die Telnet-Verbindung garnicht erst aufgebaut wird, der CLI-String erreicht also die Server-Software garnicht.Code:tell application "System Events" to run application "Terminal" without visible
Wie kriege ich das Problem am geschicktesten gelöst?
Thanx in advance & Merry X-Mas
MichaelGeändert von VisioNOIR (24.12.2011 um 00:10 Uhr)
- 24.12.2011, 11:26 #2
- 24.12.2011, 20:52 #3
Super Tipp! Danke dafür!
Der Quelltext sieht jetzt ähnlich wie folgt aus und funktioniert wunderbar
Code:set telnet to "(sleep 0.2; echo 00%3A00%3A00%3A00%3A00%3A01 playlist index +1; echo exit) | telnet 127.0.0.1 9090" do shell script telnet
- 24.12.2011, 21:16 #4
Mit dem "sleep 0.2" solltest du nicht arbeiten. Der Dezimalpunkt ist Locale-abhängig und kann (Environment-bedingt) zu Syntaxfehlern führen. Benutze lieber nur Ganzzahlen, soviel Zeit dürftest du übrig haben.
- 24.12.2011, 22:26 #5
Oh je, mal schaun, ob ich die 0,8 Sekunden erübrigen kann...

Ich behalte es im Hinterkopf. Momentan streite ich mich ein wenig mit den Behaviours von Remote Buddy, da mit der selben Fernbedienung sowohl eyeTV als auch Plex (und die erwähnte SqueezeSlave) gesteuert werden sollen. Noch möchte das nicht so wie ich es gerne hätte...
- 08.01.2012, 14:59 #6
- 08.01.2012, 15:47 #7
Nein. Nur die diversen Locales im Skript eindeutig definieren. zB so:
Code:LC_ALL=C sleep 0.3;


Zitieren

