script - Por qué los alias en un shell Bash no interactivo no funcionan
scripts bash ejemplos (4)
Estoy tratando de usar alias en un shell bash no interactivo. BASH_ENV=~/startUpFile
mis alias en ~/.bashrc
y configuré la variable BASH_ENV=~/startUpFile
. El contenido de startUpFile es source ~/.bashrc
.
Puedo ver que mis alias son reconocidos cuando ejecuto el comando alias
. Sin embargo, si trato de usar un alias definido en ~/.bashrc
, Bash no puede reconocerlo. Me da el error de comando desconocido.
Con el shell TCSH es bastante fácil hacer esto porque el archivo ~/.cshrc
siempre se lee.
¿Alguna idea de cómo puedo hacer esto con un shell Bash?
El comando shopt -s expand_aliases
permitirá la expansión de alias en shells no interactivos.
Tienes que
shopt -s expand_aliases
en el archivo señalado en tu BASH_ENV
.bashrc
solo se procesa mediante shells interactivos.
Además, los alias no se expanden cuando el shell no es interactivo, a menos que la opción de shell expand_aliases
se establezca usando shopt
. A menos que, por supuesto, se invoca el modo POSIX llamando al shell con el nombre sh
lugar de bash
.
Las personas que usan alias mucho a menudo .bashrc
su .bashrc
al final de su perfil para que los alias estén allí incluso para shells no interactivos. Esta podría no ser la mejor manera, pero es bastante común.
Son cosas como esta las que me llevan a creer que en el siglo XXI deberíamos abandonar los guiones de shell en favor de un lenguaje completo como Python. Es mucho más predecible.
Tuve un problema similar, al final, descubrí que ~ / .bashrc era todo lo que necesitaba.
Sin embargo, en Ubuntu, tuve que comentar la línea que deja de procesar ~ / .bashrc:
If not running interactively, don''t do anything
[ -z "$PS1" ] && return