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?
Es werden keine Argumente übergeben. Das Terminal läuft login -pfq $USER $PROGRAM
, das wiederum das angegebene Programm ausführt. login
signalisiert 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 -l
Option to login ihm mitteilt, den Befehl nicht als Login-Shell auszuführen, während die -l
Option to exec
ihm mitteilt, sein Argument als Login-Shell auszuführen (durch Hinzufügen des Bindestrichs). Der Grund dafür ist, dass login
auch das aktuelle Verzeichnis auf das Home-Verzeichnis des Benutzers gesetzt wird, wenn es ein Programm als Login-Shell ausführt, während dies exec
nicht der Fall ist. Dadurch kann das Terminal Shells im selben aktuellen Verzeichnis wie die aktuelle Registerkarte öffnen, ohne login
es auf das Home-Verzeichnis zurückzusetzen.
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_profile
die 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:
cdwilson
/opt/local/bin/bash
Wie ändert sich, wenn ich die Terminaleinstellungen auf änderelogin -pfq $USER $PROGRAM
? Nur damit ich deinen ersten Absatz verstehe, meinst du Terminal läuftlogin -pfq cwilson /opt/local/bin/-bash
?LaC
login -pfq cwilson /opt/local/bin/bash
. Dann führt login bash aus, übergibt-bash
aberargv[0]
.