A função Bash que cria um apelido é chamada indefinidamente

1

Eu executei a seguinte função Bash que adiciona uma string com variáveis expandidas, no final do meu bashrc :

alias() {
    echo "alias $repo=\"$HOME\"/$repo/$repo.sh" >> "$HOME"/.bashrc
    source "$HOME"/.bashrc 2>/dev/null
}
alias

Para rodar eu copiei, colei no terminal Bash (lá apareceu uma vez) e executei Enter .

A saída que obtive em ~/.bashrc foi de cerca de mil linhas da string acima:

alias $repo=\"$HOME\"/$repo/$repo.sh

O último comando ( source /home/user/.bashrc ) continuou sendo executado indefinidamente (suponho que, devido à interminável chamada da função), abri imediatamente a combinação de teclas ^C .

Depois de remover todas as mil repetições da sequência com uma operação Nano mark-set e corte, desejo perguntar por que isso aconteceu (e continua acontecendo)?

    
por user9303970 04.03.2018 / 05:33

1 resposta

3

Você definiu uma função chamada alias , adicionou uma linha a .bashrc que chama alias ... e, em seguida, originou .bashrc em seu shell (que já tem a função definida nela). O alias originário chama a função, que adiciona outra linha e cria o script novamente, chamando a função novamente uma vez para cada vez que ela já é executada , levando ao crescimento exponencial.

Altere o nome da sua função.

    
por 04.03.2018 / 05:41