Al interpretar este diagrama de flujo
Encontré eso en man bash:
Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login, primero lee y ejecuta comandos del archivo / etc / profile, si ese archivo existe.
Eso indica que los shells de inicio de sesión interactivos leen /etc/profile
(sin --noprofile)
Además, shells no interactivos con la opción --login
leer/etc/profile
Eso parece dejar algunos posibles de inicio de sesión conchas (en el que las $0
aperturas con una -
) que se no interactivo (ejecutar un script, tal vez lo más simple date
) no pueden leer (fuente) /etc/profile
.
Para confirmar o negar esta idea:
Primero intenté usarlo su -l -
, que inicia un shell de inicio de sesión con a -
como primer carácter, pero no lo hago no interactivo (y no puedo presentar las pruebas para probarlo).
Llamando algo como
$ bash -c 'date' -bash
No informa que sea un shell de inicio de sesión (incluso si el primer carácter es a -
).
Prueba esto para revelar los detalles:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
El
$0
tiene un-
como el primer carácter, no hayi
(interactivo) en el valor de$-
pero no se informa comologin_shell
(el -u). En este caso, / etc / profile no se leyó, pero no estoy seguro de que esta sea la prueba correcta.
También hay una mención de "shells de inicio de sesión no interactivos raros" en esta respuesta sin ser lo suficientemente específicos para esta pregunta.
La conclusión de este tipo es que /etc/profile
siempre se lee.
Lea la tabla de resumen: lea los shells de inicio de sesión interactivos y no interactivos /etc/profile
Y, si los ejemplos de esta página son correctos:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
La prueba de los exec su - bob -c 'env'
informes que /etc/profile
se leyó.
En breve:
¿Es posible tener un shell de inicio de sesión no interactivo (no llamado con --login o -l)?
Y si es cierto, ¿está leyendo el /etc/profile
archivo?
Si lo anterior es cierto, tenemos que concluir que TODOS los shells de inicio de sesión [interactivos (o no)] leen / etc / profile (sin --noprofile
opción).
Nota: para detectar que / etc / profile se está leyendo, solo agregue al comienzo del archivo este comando:
echo "'/etc/profile' is being read"
--login
opción. Para el segundo, si lo hagoexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
, obtengo (codificado en C qoutes)$'/etc/profile read\nshopt -s login_shell\nbash himBH'
, entonces, es login pero es interactivo. Necesitamos inicio de sesión y no interactivo . ¿Qué es lo que me estoy perdiendo?