mehrere Terminalfenster mit Namen ansprechen?

T

Tonabteilung

Neues Mitglied
Thread Starter
Dabei seit
30.10.2017
Beiträge
7
Reaktionspunkte
0
Hallo,

in meinem Setup muss ich mehrere Beamer ansprechen, die sich über Telnetverbindungen steuern lassen.
Nun habe ich ein Script erstellt, dass zu Beginn ausgeführt wird und alle vorhandenen Terminalfenster schließt, sowie zwei neue Terminalfenster mit je einer Telnetverbindung (pro Beamer) erstellt.
Code:
tell application "Terminal" to quit
delay 0.2
tell application "Terminal"
    do script " "
    delay 0.2
        do script "telnet 192.168.1.100 7000" in window 1
    do script "telnet 192.168.1.101 7000" in window 2
    delay 0.2
end tell
Danach kann ich mit diesem Script einzelne Befehle an die Beamer schicken:
Code:
tell application "Terminal"
    do script "*power = 1" in window 1
end tell
(in diesem Beispiel wird Beamer 1 eingeschaltet)

Leider habe ich das Problem, dass der Fokus bei den Terminalfenstern nicht geändert werden darf, da sonst die Zuordnung per "in window 1" bzw. "in window 2" vertauscht wird.
Deshalb dachte ich, ich benenne die Fenster und spreche Sie mit Namen an.

Fenster benennen habe ich schon geschafft, indem ich vor den Telnet-Sessions noch den Code einfüge:
Code:
do script "echo -ne \"\\033]0;Aufpro\\007\"" in window 1
do script "echo -ne \"\\033]0;Rueckpro\\007\"" in window 2
delay 0.2
Nur bin ich bisher daran gescheitert, die Fenster mit Namen anzusprechen.
Ich möchte also statt "in window 1" schreiben können "in window Aufpro" oder so ähnlich.

Kann mir da jemand einen Tipp geben, ob das geht und wie ein entsprechender Befehl aussehen würde?
Meine bisherige Recherche war hier leider erfolglos...

LG,

Wolfgang
 
du könntest dir auch die id der windows holen und die damit dann ansprechen.
set nummer to the id of window 1
do script "ls" in window id nummer
 
Das klingt gut. Danke!
Werde ich probieren und dann Rückmeldung geben.
Wird aber vermutlich erst nächste Woche soweit sein...
 
So, heute konnte ich das endlich ausprobieren.
Die ID zu nutzen funktioniert wunderbar, solange ich innerhalb eines Scripts bleibe.
Sobald ich aber eine weitere Anweisung schicke (später am Abend), passiert das in einem neuen Script, und dann ist die vorher definierte Variable "Nummer" nicht mehr definiert...

:confused::confused::confused:
 
AFAIR verschiebt das osx terminal seine IDs ganz gerne. probier mal iTerm2 aus, da sollte es das problem nicht geben.
 
Interessanter Einwand. Werde ich mal ausprobieren.
Tatsächlich glaube ich aber, dass das mit meinem o.g. Problem nichts zu tun hat.
Es ändern sich ja nicht die IDs (glaube ich zumindest), sondern die im Skript zugewiesene Variable "Nummer" beim Beenden des Skripts wieder gelöscht wird.
In einen neuen Skript existiert sie dann wieder nicht mehr.

Und ich brauche in vielen neuen Skripten eben weiterhin die eindeutige Zuweisung zu den beiden Fenstern
 
das ist normal, ist ja keine persistente variable, sondern nur eine lokale zur laufzeit existierende …
wenn du die skript übergreifend haben willst, musst du die schon irgendwo speichern …
 
schau dir mal die ID von window 1 an, mach ein 2. window auf (focus bleibt auf 2.) und schau wieder auf die IDs.
ist aber in iTerm genauso -> ist also ein problem in macos, wie oben in #1 beschrieben.
da weiss man gar nicht, was apple an der bedeutung von ID falsch verstanden hat. :p

ich habe gerade bei mir in alten scripts nachgesehen – nimm tabs in einem einzelnen window, damit kannst du das durcheinander umgehen (tabs können auch umgestellt werden und behalten trotzdem ihren index).
 
Zuletzt bearbeitet:
@oneOeight:
eigentlich völlig logisch, warum bin ich da nur nicht drauf gekommen?o_O

Jetzt hab ich nur noch ein Problem:
Meine Apple-Script-Kentnisse sind eigentlich beinahe gleich Null.
Ich kann zwar aus dem Terminal Sachen in eine Datei schreiben (mit echo) und auch wieder auslesen (mit read), aber ich muss das ja im Script machen, da ich die Variablen im Script brauche und nicht im Terminal.
Es wäre genial, wenn mir jemand grob den Code skizzieren könnte, mit dem ich aus dem Script heraus die IDs von den Fenstern in eine Datei schreiben kann und dann auch wieder auslesen kann (in eine Variable pro Terminalfenster, also für mich erstmal 2 IDs in 2 Variablen)
 
ich frage mich gerade, ob es wirklich nötig ist die variable zu speichern.
wenn ich das richtig verstehe bleiben doch die terminal fenster zwischen den applescript aufrufen offen, so dass sich die fenster id doch gar nicht ändern sollte.
daher kannst du die id doch immer abfragen.
oder kommst du dann durcheinander welches welches fenster ist?

wie man in applescript daten in dateien speichert und wieder liest, findet man auf den ganzen applescript seiten.
 
Ich benötige in den Folgescripten eine eindeutige Zuweisung zu den offenen Fenstern.
Wenn ich die ID neu auslese, weiß ich ja nicht, welche ID zum "Ersten" Fenster und welche zum "Zweiten Fenster gehört".
Momentan habe ich es ja mit window 1 und window 2 gelöst. Das ist aber davon abhängig, welches Fenster zuletzt im Fokus war. Sobald also jemand das Terminal anklickt, kann sich diese Zuordnung ändern.
Die IDs ändern sich zwar nicht, aber ich weiß ja nicht, welche ID bisher den "Ersten" Befehlt bekommen hat und welche den "Zweiten"...

Kurz, ja ich muss die ID speichern.
Dann werde ich mal weiter versuchen, mit Google schlau zu werden (bzw. den AppleScript-Seiten, die sich auf meinem Handy komischerweise nicht richtig öffnen...)
 
So, hab's geschafft.
Im ersten Script werden alle offnenen Terminal-Fenster geschlossen, die benötigten Fenster geöffnet und benannt (für den Überblick des Users), sowie die IDs in eine Datei gespeichert:
Code:
tell application "Terminal" to quit
delay 0.2
tell application "Terminal"
    do script " "
    delay 0.2
    do script "echo -ne \"\\033]0;Aufpro\\007\"" in window 1
    do script "echo -ne \"\\033]0;Rueckpro\\007\"" in window 2
    set Aufpro to id of window 1 as string
    set Rueckpro to id of window 2 as string
end tell

set Datei to open for access "%PATH%/TerminalID.txt" with write permission
try
    set eof of Datei to 0
    write Aufpro & return & Rueckpro to Datei as string
    close access Datei
on error
    close access Datei
end try

In den Folgescripten werden die IDs aus der Datei in Variablen geladen und dann die entsprechenden Befehle in den jeweiligen Fenstern ausgeführt:
Code:
set Datei to open for access "%PATH%/TerminalID.txt"
try
    set Aufpro to (read Datei before return)
    set Rueckpro to (read Datei before return)
    close access Datei
on error
    close access Datei
end try

tell application "Terminal"
    do script "echo Das ist das AufproFenster" in window id Aufpro
    do script "echo RueckproFenster" in window id Rueckpro
end tell

Danke für eure Hilfe.
 
Zurück
Oben Unten