¿Cómo están disponibles los alias en el shell principal, pero no en el subshell?

¿Cómo están disponibles los alias en el shell principal, pero no en el subshell?

Estaba leyendo un texto y dice:

El archivo de configuración del shell .bashrc en realidad se ejecuta cada vez que genera un shell BASH, como cuando ejecuta un script de shell. En otras palabras, cada vez que se crea un subshell, se ejecuta el archivo .bashrc. Esto tiene el efecto de exportar cualquier variable local o alias que haya definido en el archivo de inicialización del shell .bashrc.

También leí que cada vez que ejecuto un script de shell (digamosguión1.sh), se crea una subcapa. Entonces, cuando se crea esta subcapa,.bashrcEl archivo debe ejecutarse y, por lo tanto, los alias definidos en.bashrcdeben estar disponibles en el subshell (que no lo están). Y si los alias no están disponibles en este subshell, ¿cómo están disponibles en el shell principal (a través del cual ejecuto mi script)?

Respuesta1

Bien, en el shell bash de Linux puedes decir

source /path/to/my_lib.sh

para cargar sus definiciones de alias desde el archivo. O, para reducir la complejidad, simplemente puede copiar ese alias defs en su script bash.

¡Pero espera! Esto sólo creará los alias, probablemente con

alias foo3 foo9  # describe these two aliases: declare errors if one doesn't exist

Disfrutará de sus nuevas definiciones de alias, pero ejecutarlas fallará antes de habilitar la expansión de alias con:

shopt -s expand_aliases # alias xpn ON

Considere también:

shopt -u expand_aliases # alias xpn OFF

o

shopt  expand_aliases   # query whether

o

unalias foo3 foo9 # delete these aliases 

Respuesta2

Si ha definido alias script1.shy desea que estén disponibles en todas partes, agregue a su .bashrcarchivo:

source /path/to/script1.sh

o alternativamente:

. /path/to/script1.sh

Para evitar un error en caso de que el script no exista, puedes usar:

if [ -f /path/to/script1.sh ]; then source /path/to/script1.sh; fi

Lo mismo funciona para cualquier función que defina en script1.sh.

información relacionada