Encontré el pid de mi shell bash
$ echo $$
7791
Luego verifico sus variables de entorno de dos maneras diferentes:
$ cat /proc/7791/environ | tr '\0' '\n'
dehttps://stackoverflow.com/a/532284/156458, y
$ env
Sin embargo, sus resultados no son idénticos. Por ejemplo, muestran diferentes valores de PATH
. ¿Por qué difieren? Gracias.
Respuesta1
Deberías leer los comentarios debajo de esa respuesta engañosa.
/proc/$PID/environ
no es utilizado en vivo por el shell. Simplemente representa el entorno inicial del proceso cuando se lanzó.
Cualquier cosa que se haga en el shell, incluidos sus scripts de inicio, puede cambiar esos valores desde el shell sin cambiar la proc
entrada que está viendo.
Respuesta2
/proc/7791/environ
muestra el entorno original del shell, tal como lo recibió el proceso cuando se inició mediante la llamada al sistema execve:
int execve(const char *filename, char *const argv[], char *const envp[]);
Cuando el shell se está ejecutando, puede cambiar su conjunto de variables exportadas, por ejemplo evaluando .bashrc
. Este nuevo conjunto luego se pasa en el vector envp
cuando env
se inicia el programa.
Respuesta3
Cualquiera que sea el problema que estés intentando resolver, puedes intentarlo si utilizas
/proc/self
lo resuelve. En lugar de obtener el entorno inicial del shell, un
cat /proc/self/environ
muestra el entorno del cat
comando, que debe ser igual al entorno actual del shell en el que se ejecuta.