Welche Optionen übergibt Terminal beim Start an Bash?

In den Terminal-Einstellungen kann ich das Terminal so konfigurieren, dass "Shells öffnen mit:" -> "Befehl (vollständiger Pfad):" /opt/local/bin/bash.

Welche Optionen übergibt das Terminal beim Aufrufen dieses Befehls? Terminal scheint jede Shell als Login-Shell auszuführen, also gehe ich davon aus, dass sie --loginübergeben wird?

Gibt es eine Apple-Dokumentation, die einen Überblick darüber gibt, was genau ausgeführt wird, wenn Sie ein Terminalfenster öffnen?

Antworten (2)

Es werden keine Argumente übergeben. Das Terminal läuft login -pfq $USER $PROGRAM, das wiederum das angegebene Programm ausführt. loginsignalisiert dem Programm, dass es sich um eine Login-Shell handelt, indem ein -to argv[0](der Programmname) vorangestellt wird.

Für die Standard-Shell macht Terminal tatsächlich etwas anderes. Es ruft auf login -pfl $USER /bin/bash -c exec -la bash /bin/bash, wobei die -lOption to login ihm mitteilt, den Befehl nicht als Login-Shell auszuführen, während die -lOption to execihm mitteilt, sein Argument als Login-Shell auszuführen (durch Hinzufügen des Bindestrichs). Der Grund dafür ist, dass loginauch das aktuelle Verzeichnis auf das Home-Verzeichnis des Benutzers gesetzt wird, wenn es ein Programm als Login-Shell ausführt, während dies execnicht der Fall ist. Dadurch kann das Terminal Shells im selben aktuellen Verzeichnis wie die aktuelle Registerkarte öffnen, ohne logines auf das Home-Verzeichnis zurückzusetzen.

/opt/local/bin/bashWie ändert sich, wenn ich die Terminaleinstellungen auf ändere login -pfq $USER $PROGRAM? Nur damit ich deinen ersten Absatz verstehe, meinst du Terminal läuft login -pfq cwilson /opt/local/bin/-bash?
Nein, das Terminal läuft login -pfq cwilson /opt/local/bin/bash. Dann führt login bash aus, übergibt -bashaber argv[0].

Der Befehl:

/opt/local/bin/bash

weist Terminal.app im Wesentlichen an, eine interaktive Bash-Shell zu laden (der Pfad für Ihr Beispiel ist wahrscheinlich die Macports-Version). Wenn Sie Terminal öffnen, wird zunächst eine Login-Shell-Sitzung (in Bash) gestartet. Anmelde-Shells können Dateien wie lesen ~/.profile, ~/.bash_profiledie Umgebungsvariablen für Ihre Sitzung einrichten, sodass das, was ausgeführt wird, hauptsächlich darauf hinweist, was in diesen Dateien konfiguriert ist.

Im Allgemeinen werden beim Öffnen einer Bash-Shell über Terminal standardmäßig diese Dinge ausgeführt:

Prozesse

bash
login

Öffnen Sie Dateien und Ports

/bin/bash
/usr/lib/dyld
/private/var/db/dyld/dyld_shared_cache_x86_64
/dev/ttys000 

Mehr Informationen:

Offizielle Bash-Website

Apple Manpage: bash(1)