Por qué los alias en un shell Bash no interactivo no funcionan

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.

.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 del 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.

Tienes que

 shopt -s expand_aliases 

en el archivo señalado en tu BASH_ENV

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