Como os aliases estão disponíveis no shell principal, mas não no subshell?

Como os aliases estão disponíveis no shell principal, mas não no subshell?

Eu estava lendo um texto e diz:

O arquivo de configuração do shell .bashrc é realmente executado sempre que você gera um shell BASH, como quando você executa um script de shell. Em outras palavras, cada vez que um subshell é criado, o arquivo .bashrc é executado. Isso tem o efeito de exportar quaisquer variáveis ​​locais ou aliases que você definiu no arquivo de inicialização do shell .bashrc.

Eu também li que cada vez que executo um script de shell (digamosscript1.sh), um subshell é criado. Então, quando este subshell é criado,.bashrcarquivo deve ser executado e, portanto, alias definidos em.bashrcdevem estar disponíveis no subshell (que não estão). E se os alias não estiverem disponíveis neste subshell, como eles estarão disponíveis no shell principal (por meio do qual executo meu script)?

Responder1

Certo, no bash shell do Linux você pode dizer

source /path/to/my_lib.sh

para carregar seu alias defs do arquivo. Ou, para diminuir a complexidade, você pode simplesmente copiar esse alias defs em seu script bash.

Mas espere! Isso criará apenas os aliases, provavelmente com

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

você aproveitará seus novos defs de alias, mas executá-los falhará antes de ativar a expansão de alias com:

shopt -s expand_aliases # alias xpn ON

Considere também:

shopt -u expand_aliases # alias xpn OFF

ou

shopt  expand_aliases   # query whether

ou

unalias foo3 foo9 # delete these aliases 

Responder2

Se você definiu aliases script1.she deseja que eles estejam disponíveis em qualquer lugar, adicione ao seu .bashrcarquivo:

source /path/to/script1.sh

ou alternativamente:

. /path/to/script1.sh

Para evitar um erro caso o script não exista, você pode usar:

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

O mesmo funciona para qualquer função que você definir no script1.sh.

informação relacionada