Wie kann ich eine .terminal-Datei über die Befehlszeile importieren?

3

Ich schreibe ein (Bash-) Skript, um das Einrichten meiner Mac-Umgebung zu automatisieren, und möchte dies tun , es sei denn, Sie verwenden nur die Befehlszeile. Ich möchte dieses Thema auch als Standard festlegen.

Ich habe eine .terminal-Datei exportiert und alles ist einsatzbereit. Ich kann nur nicht herausfinden, wie dies programmgesteuert durchgeführt wird. Gibt es dafür irgendwo eine Dokumentation, die mir fehlt?

... oder wäre dies mit AppleScript einfacher? Das habe ich aber noch nie gemacht.

Matt
quelle
Warum möchten Sie diese Einstellung von einer Shell aus und nicht direkt von innen vornehmen Terminal?
Dan
@ DanielAzuelos So kann ich den Prozess automatisieren.
Matt
1
Wie wollen Sie dieses Shell-Skript ausführen? Von einem Terminal?
Dan
Zumindest aus einer Muschel. Wenn ich es von einem Terminal aus tun müsste, ist dieses Automatisierungsskript hoffentlich das einzige, das ich in den Standardeinstellungen des Terminals ausführen müsste.
Matt
→ Matt: Müssen Sie diese Konfiguration mehrmals durchführen (dh auf mehr als einem Account oder auf mehr als einem Computer)?
Dan

Antworten:

1

Verwenden Sie den openBefehl, gefolgt von der Änderung der Einstellungen:

open ~/MyTerminalSettings.terminal
defaults write com.apple.terminal "Default Window Settings" "MyTerminalSettings"

Mit dem openBefehl wird ein neues Terminalfenster geöffnet, das Skript wird jedoch weiterhin im ursprünglichen Fenster ausgeführt, und Sie können das neue Fenster schließen, wenn Sie dies möchten.

Timpraetor
quelle
Dadurch wird ein Terminalfenster geöffnet, das möglicherweise stört (obwohl dies möglicherweise unterdrückt werden kann) - und das Thema scheint importiert zu werden ... aber wie würde ich es als Standardthema festlegen?
Matt
0

Dies ist keine Antwort, aber die grundlegenden Bausteine, die Sie zum Schreiben Ihres Shell-Skripts verwenden müssen.

  1. Stellen Sie sicher, dass Terminaldas Programm nicht ausgeführt wird, um eine Beschädigung der Plist zu vermeiden:

    wenn ps axe | grep '[/] Terminal'> / dev / null 2> & 1; dann
        echo Terminal läuft! > & 2 && Ausfahrt 2
    fi
    # gehen Sie geradeaus
    

    hüte dich vor dem [/]was hier ist um grepdeinem grep befehl auszuweichen das immer erfolgreich sein wird.

  2. Konvertieren Sie Ihre Terminalplist in eine Textdatei mit:

        
    plutil -convert xml1 ~ / Library / Preferences / com.apple.Terminal.plist
    
  3. Entfernen Sie Ihre .terminalDatei aus dem Header, sagen wir, der Name lautet imported.terminal

    sed -n '/<dict>/,/<\/dict>/p' imported.terminal >tmp.terminal
  4. Fügen Sie diese tmp.terminalListe in ~/Library/Preferences/com.apple.Terminal.plist das rechte Wörterbuch ein.

    Dies erfordert eine Kontextanalyse, um es richtig zu machen. Ich würde wählen , perlwenn ich es zu tun hatte, aber awk, exoder sedvielleicht mit ein paar Zeilen und Prüfung einfacher sein.

Dan
quelle
2
Es könnte schwierig sein, das Terminal nicht laufen zu lassen, während ein Skript im Terminal läuft :-)
nohillside
Ich dachte, Matt wollte dies von einer Shell aus und nicht direkt von einem Terminal aus tun, weil er dies nicht von einem Terminal aus tut (zum Beispiel über a ssh). Dies sollte jedoch geklärt werden.
Dan
So oder so. Was auch immer einfacher ist.
Matt
1
Wie Patrix bemerkte, wird ein Weg schwierig sein. Man kann Terminalplist nicht einfach ändern, wenn die Shell, die die Aufgabe ausführt, aus demselben TerminalProgramm stammt. Wenn Terminalbeendet wird, werden alle bis dahin vorgenommenen Änderungen überschrieben. Dies war der Grund für meine vorgeschlagene Schritt 1
dan
Richtig, okay, verstanden.
Matt