Ich habe die PID meiner Bash-Shell gefunden
$ echo $$
7791
Dann überprüfe ich die Umgebungsvariablen auf zwei verschiedene Arten:
$ cat /proc/7791/environ | tr '\0' '\n'
aushttps://stackoverflow.com/a/532284/156458, Und
$ env
Ihre Ausgaben sind jedoch nicht identisch. Sie zeigen beispielsweise unterschiedliche Werte von an PATH
. Warum unterscheiden sie sich? Danke.
Antwort1
Sie sollten die Kommentare unter dieser irreführenden Antwort lesen.
/proc/$PID/environ
wird von der Shell nicht live verwendet. Es stellt lediglich die ursprüngliche Umgebung des Prozesses beim Start dar.
Alles, was in der Shell getan wird, einschließlich ihrer Init-Skripte, kann diese Werte innerhalb der Shell ändern, ohne dass sich der proc
angezeigte Eintrag ändert.
Antwort2
/proc/7791/environ
zeigt die ursprüngliche Umgebung der Shell, wie sie vom Prozess beim Start mit dem Systemaufruf execve erhalten wurde:
int execve(const char *filename, char *const argv[], char *const envp[]);
Wenn die Shell läuft, kann sie ihren Satz exportierter Variablen ändern, beispielsweise durch Auswerten . Dieser neue Satz wird dann beim Starten des Programms .bashrc
im Vektor übergeben .envp
env
Antwort3
Egal welches Problem Sie lösen möchten, Sie können es mit
/proc/self
löst das Problem. Anstatt die ursprüngliche Umgebung der Shell abzurufen,
cat /proc/self/environ
zeigt die Umgebung des cat
Befehls an, die der aktuellen Umgebung der Shell entsprechen sollte, in der er ausgeführt wird.