Aliases no processo subshell / child

11

Eu configurei aliases em /etc/profile.d/alias.sh para cada shell de login. Mas se eu executar script.sh, não posso usar esse alias. Como posso definir alias, mesmo para subshells ou processos filhos?

/etc/profile.d/alias.sh

alias rmvr='rm -rv';
alias cprv='cp -rv';
alias mvrv='mv -rv';
    
por lisak 05.08.2011 / 17:54

2 respostas

17

Os aliases não são herdados. É por isso que eles são tradicionalmente definidos em bashrc e não em profile . Fonte seu script.sh do seu .bashrc ou o todo o sistema em vez disso.

    
por 05.08.2011 / 17:59
6

É porque /etc/profile.d/ é usado apenas pelo shell de login interativo. No entanto, /etc/bash.bashrc é usado pelo shell interativo de não-login.

Como normalmente defino alguns aliases globais para o sistema, comecei a criar /etc/bashrc.d onde posso soltar um arquivo com alguns aliases globais:

    HAVE_BASHRC_D='cat /etc/bash.bashrc | grep -F '/etc/bashrc.d' | wc -l'

    if [ ! -d /etc/bashrc.d ]; then
            mkdir -p /etc/bashrc.d
    fi
    if [ "$HAVE_BASHRC_D" == "0" ]; then
        echo "Setting up bash aliases"
            (cat <<-'EOF'
                                    if [ -d /etc/bashrc.d ]; then
                                      for i in /etc/bashrc.d/*.sh; do
                                        if [ -r $i ]; then
                                          . $i
                                        fi
                                      done
                                      unset i
                                    fi
                            EOF
            ) >> /etc/bash.bashrc

    fi
    
por 08.11.2011 / 20:35