En mi .profile
, utilizo el siguiente código para asegurar que las funciones y los alias relacionados con Bash solo se obtienen si el shell de inicio de sesión es realmente Bash :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Actualmente estoy en el proceso de poner mis archivos de configuración de shell, scripts y funciones bajo control de versiones. También he recientemente iniciado el proceso de eliminación del bash casuales de scripts de shell que no se benefician de características Bash-específicas, por ejemplo, la sustitución function funcname()
con funcname()
.
Para los archivos de mi concha repositorio, he configurado un pre-confirmación de gancho que se ejecuta la checkbashisms
utilidad de Debian paquete devscripts en cada sh
fichero en el repositorio para asegurarse de que no introduzcan inadvertidamente sintaxis específica de Bash. Sin embargo, esto genera un error para mi .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Me preguntaba si había una manera de verificar qué shell se está ejecutando que no activaría una advertencia checkbashisms
.
Verifiqué la lista de variables relacionadas con shell enumeradas por POSIX con la esperanza de que una de ellas pudiera usarse para mostrar el shell actual. También he examinado las variables establecidas en un shell de Dash interactivo pero, nuevamente, no he podido encontrar un candidato adecuado.
Por el momento, he excluido .profile
de ser procesado por checkbashisms
; es un archivo pequeño, por lo que no es difícil verificarlo manualmente. Sin embargo, después de investigar el problema, todavía me gustaría saber si hay un método compatible con POSIX para determinar qué shell se está ejecutando (o al menos una forma que no haga checkbashisms
que falle).
Más antecedentes / aclaraciones
Una de las razones por las que pongo mis archivos de configuración de shell bajo control de versiones es para configurar mi entorno en todos los sistemas en los que actualmente me conecto regularmente: Cygwin, Ubuntu y CentOS (ambos 5 y 7, usando Active Directory para el usuario autenticación). Con frecuencia inicio sesión a través de X Windows / entornos de escritorio y SSH para hosts remotos. Sin embargo, me gustaría que esto sea una prueba de futuro y que tenga la menor confianza posible en las dependencias del sistema y otras herramientas.
Lo he estado utilizando checkbashisms
como una comprobación de sanidad simple y automatizada para la sintaxis de mis archivos relacionados con shell. No es una herramienta perfecta, por ejemplo, ya le he aplicado un parche para que no se queje del uso de command -v
mis scripts. Mientras investigaba, aprendí que el propósito real del programa es garantizar el cumplimiento de la política de Debian que, según tengo entendido, se basa en POSIX 2004 en lugar de 2008 (o su revisión de 2013).
.bash_profile
fuente de ambos .profile
y (condicionalmente) .bashrc
.