Wie kann ich ein Shell-Skript als Wrapper für die ausführbare Hauptdatei einer App einrichten?

Ich habe eine Anwendung, die ich über ein Shell-Skript starten möchte, das einige Einstellungen vornimmt und dann die Anwendung selbst mit einigen spezifischen Optionen startet. Idealerweise würde dieses Skript immer dann ausgeführt, wenn die Anwendung normalerweise gestartet würde, dh wenn ich im Dock darauf klicke, im Anwendungsordner doppelklicke, von QS aus starte oder sogar auf eine Datei klicke, die in dieser Anwendung geöffnet wird.

Im Moment habe ich einen Applescript-Wrapper „App“ für mein Skript, aber der Nachteil ist, dass es als separate App von der Haupt-App erscheint, die sich in meinem Dock befindet, also muss ich daran denken, nicht auf das Symbol der Haupt-App zu klicken, aber Starten Sie stattdessen diese alternative App.

Ist das also möglich? Eine Idee, die ich hatte, war, die ausführbare Hauptdatei in der App in etwas anderes umzubenennen und sie dann durch mein Skript zu ersetzen. Ist das sinnvoll oder gibt es eine bessere Lösung?

Für diejenigen, die neugierig sind, versuche ich, Emacs.app so einzurichten, dass ein Daemon gestartet und dann mit emacsclient geöffnet wird. Grundsätzlich möchte ich, dass dieses Skript anstelle von emacs gestartet wird (und ich werde das Skript ändern, um Dateiargumente zu übernehmen und sie ebenfalls zu öffnen).

Ich bin verwirrt darüber, was Sie für Emacs tun - Sie können Emacs.app mit Befehlszeilenargumenten starten
Ich möchte, dass, wenn ich auf das Symbol der Emacs-App in meinem Dock klicke, mein Skript anstelle der ausführbaren Haupt-Emacs-Datei ausgeführt wird.
Cooler Anwendungsfall, um zu lernen, wie man Dinge schreibt und auseinanderhält, was eine anklickbare App im Vergleich zu einem Skript ausmacht.
Das ist genau das, was ich suche. Könntest du dein AppleScript hier posten? Ich habe noch nie mit AppleScript gearbeitet, also bin ich neugierig, wie man das macht.
@Jan Ich habe es aufgegeben, den Emacs-Daemon unter MacOS zum Laufen zu bringen, und stattdessen ein Paket geschrieben, um den Daemon-Modus zu simulieren, ohne den Daemon-Modus tatsächlich zu verwenden: github.com/DarwinAwardWinner/mac-pseudo-daemon

Antworten (3)

Use /Applications/Emacs.app/Contents/MacOS/Emacs(oder eine andere ausführbare Datei in diesem Verzeichnis).

Im Allgemeinen sind Anwendungspakete wie oben strukturiert. Verwenden Sie das Terminal, um lszu der Datei zu gelangen.

Ich kann die Hauptfrage oder die Antwort, die Sie mit Ihrer endgültigen Lösung gegeben haben, nicht kommentieren, aber denken Sie daran, sie als gelöst zu markieren :)

Ich würde mit einem Tool wie Platypus beginnen , damit Ihr Skript alle Ausstattungsmerkmale einer App enthält, und testen, ob die Dinge wie erwartet funktionieren.

Automator hat auch eine schöne GUI, um zu entscheiden, wie Argumente für ein Skript behandelt werden sollen - und wir haben hier mehrere Fragen, die untersuchen, wie Argumente in und aus einer Automator-Aktion / einem Automator-Applet übergeben werden.

Ohne weitere Details darüber, wie Ihr Daemon entworfen ist und wie Sie ihn starten, kann ich nur einige Elemente Ihrer Lösung herausgreifen, aber da jeder diese Antwort bearbeiten kann, um weitere Details bereitzustellen (oder eine eigenständige Antwort zu beantworten) - Vielleicht kann das den Stein ins Rollen bringen, um Ihnen eine Lösung zu bringen.

Ich denke, ich habe im Grunde alles gelöst, bis auf eine Sache: Wenn ich die App "starte", indem ich zB auf ihr Dock-Symbol klicke, möchte ich eigentlich, dass sie stattdessen mein Skript ausführt.
Sie könnten Platypus verwenden, um Ihr Skript zu einem anklickbaren Symbol zu machen, das Symbol der App in Ihr Skript zu kopieren und Ihr Skript im Dock zu platzieren, oder?
Ja, ich könnte, und tatsächlich habe ich das jetzt. Die Fenster der App würden jedoch unter einem eigenen Symbol gruppiert, das vom Symbol des Skripts getrennt wäre.
Eine andere Herangehensweise wäre die folgende: Angenommen, ich habe mein Skript mit Platypus in eine App gepackt, gibt es eine Möglichkeit, meine App die Fenster der anderen App in ihr Symbol "einfangen" zu lassen?
Ich sehe keine Möglichkeit, die Kakao-Vererbung zu trennen, bei der eine App ihre Fenster steuert. Sie könnten also mit einer Hilfs-App stecken bleiben, die etwas tut, bevor die Haupt-App ausgeführt wird, oder die Haupt-App patchen, um das zu tun, was Sie von Anfang an wünschen . Die dritte Option besteht darin, eine zweite App zu haben, die intelligent genug ist, um die erste App so zu manipulieren, dass sie das tut, was getan werden muss, während die Haupt-App ausgeführt wird und Daten/Fenster ändert. Das wäre das Schwierigste überhaupt.

Ich konnte bekommen, was ich wollte, indem ich in den App-Ordner ging Contents/MacOSund die Emacs-Binärdatei in Emacs.real umbenannte. Dann habe ich mein Skript eingefügt und es Emacs genannt, um die Binärdatei zu ersetzen, und es so eingerichtet, dass es Emacs.real aufruft, nachdem ich die erforderlichen Einstellungen vorgenommen habe. Wenn Sie dann die App starten, wird mein Skript gestartet.

Leider gibt es andere Probleme mit dem Daemon-Modus von Emacs, die mich daran hindern, ihn zu verwenden, aber zumindest habe ich dieses Problem gelöst!