O Bash está lento para iniciar devido a esta linha no .bashrc. O que poderia causar isso?

18

Meu arquivo .bashrc contém uma linha para esse efeito:

alias prog="/path/to/script.sh $(find $(pwd) -name prog)"

Quando eu comento essa linha, o Bash começa quase instantaneamente quando eu abro um novo terminal. Com esta linha, há um atraso de 4 a 5 segundos antes do meu cursor aparecer.

A remoção dos comandos aninhados $(pwd) , etc. acelera novamente também. Por que isso está acontecendo? Ainda posso usar comandos aninhados de alguma forma?

    
por BBales 14.05.2017 / 23:57

1 resposta

44

Como a substituição de comandos está entre aspas duplas, ela é avaliada no momento em que o comando é definido. Isso faz com que find examine o conteúdo do seu disco rígido enquanto o .bashrc está em execução.

Você, ao contrário, parece querer que seja avaliado no momento do uso. Nesse caso, use aspas simples:

alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'

Observe que esse alias falhará se qualquer um dos arquivos encontrados tiver espaços em branco em seus nomes. Para evitar isso:

alias prog='find . -name prog -exec /path/to/script.sh {} +'

Este último formulário funcionará de forma confiável para qualquer tipo de nome de arquivo.

    
por 15.05.2017 / 00:15