Estoy tratando de escribir una función para reemplazar la funcionalidad del exitincorporado para evitar que salga del terminal.
Intenté usar la SHLVLvariable de entorno pero no parece cambiar dentro de las subcapas:
$ echo $SHLVL
1
$ ( echo $SHLVL )
1
$ bash -c 'echo $SHLVL'
2
Mi función es la siguiente:
exit () {
if [[ $SHLVL -eq 1 ]]; then
printf '%s\n' "Nice try!" >&2
else
command exit
fi
}
Sin exitembargo, esto no me permitirá usar dentro de subcapas:
$ exit
Nice try!
$ (exit)
Nice try!
¿Cuál es un buen método para detectar si estoy o no en una subshell?
(...)heredan todas las propiedades del proceso primario. Las respuestas proporcionadas son soluciones más sólidas para determinar su nivel de shell.
BASH_SUBSHELLrespuesta (aunque controvertida) no se aplicaría a esa pregunta.