Meu .bashrc
arquivo 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 abro um novo terminal. Com esta linha, há um atraso de 4-5 segundos antes do meu cursor aparecer.
A remoção dos comandos aninhados $(pwd)
etc. também acelera novamente. Por que isso está acontecendo? Ainda posso usar comandos aninhados de alguma forma?
find
comando, que é executado no momento da inicialização e pode levar muito tempo para ser executado, dependendo da estrutura do diretório. Se você usar aspas simples, em vez de aspas duplas,find
será executado em tempo de execução, quando o valoralias
for invocado. Depende do diretório de trabalho que você deseja usar, da corrente no momento da declaração ou no tempo de execução. A propósito,$(pwd)
é uma maneira bastante ineficiente de expressar.
ou$PWD
.find
? Depois de instalá-lo, você sabe onde ele está. Mesmo se você atualizá-lo com frequência e alterar seu nome, poderá manter um link simbólico para que ele esteja sempre disponível com um nome fixo.Respostas:
Como a substituição do comando está entre aspas duplas, ela é avaliada no momento em que o comando é definido. Isso faz
find
com que você examine o conteúdo do disco rígido enquanto.bashrc
estiver em execução.Você, pelo contrário, parece querer que ela seja avaliada no momento do uso. Nesse caso, use aspas simples:
Observe que esse alias falhará se algum dos arquivos encontrados tiver espaço em branco em seus nomes. Para evitar isso:
Este último formulário funcionará de maneira confiável para qualquer tipo de nome de arquivo.
fonte
prog
,find
precisaria ser executado, enquanto antes, seria executado apenas uma vez (na inicialização do shell).find
, geralmente é muito mais rápido.prog
e executar novamentefind
se o caminho antigo não existir mais?