Shell-Umgebung simulieren, die für GUI-Apps verfügbar ist?

Ich teste einige Skripte, die für die Verwendung in verschiedenen GUI-Apps bestimmt sind, entweder als direkte Shell-Aufrufe oder als Teil eines AppleScript- do shell scriptAufrufs. Ich weiß aus Erfahrung, dass die Shell, die eine App erhält, nicht mit der übereinstimmt, die ich standardmäßig beim Starten von Terminal erhalte. Daher würde ich gerne einen Weg finden, die Shell zu simulieren, die eine App erhält, damit ich die Skripte mit diesem Wissen debuggen kann sie verhalten sich so, wie ich es erwarten sollte, dass sie sich in ihrer endgültig erwarteten Nutzungsumgebung verhalten.

Wie öffne ich also ein Terminal (oder ändere eines, das bereits geöffnet ist), damit es sich wie die Shell verhält, auf die eine GUI-App Zugriff hat?

Antworten (1)

Lassen Sie mich zunächst das Problem lösen, dass eine GUI-App nicht dieselbe Umgebung wie eine Terminalsitzung für ein Bash-Skript bereitstellt.

Die Unterschiede sind auf Ihr Bash-Profil zurückzuführen, sodass Sie mit dem Befehl genau dasselbe in einem GUI-Shell-Skript haben können source. Setzen Sie die Zeile source /Users/<username>/.bash_profile(ersetzen Sie sie <username>durch Ihren Kurznamen) an den Anfang Ihres Bash-Skripts, und Sie haben dieselbe Umgebung im Skript, wenn es in einer GUI-App ausgeführt wird, wie in Ihrer Shell-Sitzung.

So erhalten Sie eine Shell, ohne Ihr Profil in iTerm2 auszuführen (ich konnte es in Terrminal nicht zum Laufen bringen):

  • Öffnen Sie Terminal-> Einstellungen
  • Wechseln Sie zum Bereich Profile
  • Duplizieren Sie Ihr Standardprofil
  • Allgemein"
  • Ändern Sie den Namen des neuen Profils in „Kein Profil“
  • Stellen Sie die Tastenkombination auf Strg-Befehl-A ein
  • Klicken Sie auf "Befehl"
  • Setzen Sie den Befehl auf/bin/bash -norc
  • Schließen Sie die Einstellungen

Jetzt öffnet Control-Command-A eine Sitzung genauso wie eine GUI-App - alles auf die bashStandardeinstellung gesetzt.

Sourcing im Profil löst nicht alle Probleme. GUI-Apps lesen beispielsweise keine Änderungen in PATH ein, /etc/paths.d/wie es Terminal tut. Ich denke, es könnte auch einige andere Probleme mit Umgebungsvariablen geben, aber ich konnte sie noch nicht festnageln. Trotzdem werde ich mir iTerm2 ansehen und sehen, wie viel näher ich damit dem komme, wo ich sein muss.
Die geringfügigen Unterschiede, die Sie gefunden haben, sind darauf zurückzuführen, dass eine GUI-App nicht ausgeführt wird /etc/profile. Der einzige von Bedeutung ist der PATH, entschuldigen Sie, dass ich ihn vergessen habe, ich habe meinen explizit in meinem Profil festgelegt. Die anderen sind alle Terminal und Terminal bezogen. Die Verwendung der iTerm2-Lösung behebt auch all das.