Wie schreibe ich ein Skript, das ein iTerm2-Fenster öffnet und einen Befehl ausführt?

Was mache ich

Ich verwende iTerm2 Build 3.0.15 und schreibe ein Skript, das ein neues Fenster öffnet und "Hallo Welt" auf dem Bildschirm druckt. Wirklich, ich bin daran interessiert, jeden Befehl auszuführen, aber echo "hello world"als Ausgangspunkt zu verwenden.

Was ich versucht habe

Ich habe die iTerm2- Dokumentation zum Skripting gelesen . Ich wollte mehr erfahren, also zog ich das iTerm2Symbol auf das Script EditorSymbol, um das für mich verfügbare Wörterbuch anzuzeigen, und fand den folgenden Befehl:

Geben Sie hier die Bildbeschreibung ein

Aus dem Lesen des Wörterbuchs und der Dokumentation habe ich das folgende Skript geschrieben:

tell application "iTerm"
  create window with default profile command "echo hello world"
end tell

Als ich mein Skript vom Terminal aus ausführte, öffnete sich ein neues Fenster und "Hallo Welt" war auf dem Bildschirm; Ich habe jedoch den folgenden Rohrbruchfehler erhalten:Geben Sie hier die Bildbeschreibung ein

Wenn ich das Fenster geschlossen wähle Ok, erhalte ich die folgende Meldung:

$ osascript iterm.applescript
window id 6415

Die Fragen

  • Was bedeuten diese defekten Pipe- und Fenster-ID 6415-Fehler?
  • Wie schreibe ich ein Skript, das ein iTerm2-Fenster öffnet und einen Befehl ausführt?
delay 1 write text "clear" ist nett, wenn man einen sauberen Start will

Antworten (3)

Versuche dies:

tell application "iTerm2"
    set newWindow to (create window with default profile)
    tell current session of newWindow
        write text "echo it works!"
    end tell
end tell

Der write Befehl führt den Befehl , wenn er nicht verwendet wird without newline, aufgrund des standardmäßig hinzugefügten Zeilenumbruchs nach dem "zu sendenden Text" aus. Somit bleibt das Fenster geöffnet, nachdem der Befehl abgeschlossen ist, bereit für weitere Verwendung.write text


Aus dem iTerm AppleScript-Wörterbuch:

write v : Text so senden, als wäre er getippt.

      Write specifier : Die zu sendende Session an
            [ Inhalt der Datei file] : Dateiname an den der Inhalt von
            [ text text] gesendet werden soll : Zu sendender Text
            [ newline boolean] : Wenn eine neue Zeile am Ende des Textes hinzugefügt werden soll (Standard: ja)

Dies funktionierte früher, wenn es mit ausgeführt wurde osascript -e, aber seit kurzem gibt es den Fehler -2741: Syntaxfehler, "," erwartet, aber Klassenname gefunden. (Übersetzte Fehlermeldung aus dem Deutschen, englischer Wortlaut kann leicht abweichen).

Ersetzen command "echo hello world"durch

command "bash -c \"echo hello world && read\""

Die Verwendung von readlässt bash darauf warten, dass der Benutzer die Zeile beendet (dh durch Drücken der Eingabetaste), bevor es beendet wird. Wenn Sie innerhalb von 3 Sekunden die Eingabetaste drücken, wird immer noch die Warnung angezeigt, da dies eine iTerm-Funktion ist, die Sie deaktivieren können, indem Sie das Kontrollkästchen für die Warnung aktivieren, und genauer unter Einstellungen → Erweitert → Vor kurzlebigen Sitzungen warnen.

@user Sicher, bearbeitet
Ist es möglich, dass das Terminal nicht geschlossen wird? Das Ziel ist es, sagen zu können: "Öffne iTerm, führe diesen Befehl aus und beende es nicht."
on alfred_script(q)
    tell application "iTerm2"
        set newWindow to (create window with default profile)
        tell current session of newWindow
            write text q
        end tell
    end tell
end alfred_script
Wir suchen nach Antworten, die mehr sind als nur ein Codeschnipsel. Was macht dieses Skript, wie kann es verwendet werden, wie unterscheidet es sich von dem ähnlich aussehenden in einer der anderen Antworten und wer ist Alfred? Bitte bearbeiten Sie Ihre Antwort, um Details hinzuzufügen.