web-dev-qa-db-fra.com

Bash est lent à démarrer à cause de cette ligne dans .bashrc. Qu'est-ce qui pourrait causer ça?

Mon fichier .bashrc contient une ligne à cet effet:

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

Lorsque je commente cette ligne, Bash démarre presque instantanément lorsque j'ouvre un nouveau terminal. Avec cette ligne, il y a un délai de 4 à 5 secondes avant que mon curseur n'apparaisse.

Le fait de supprimer les commandes imbriquées $(pwd), etc. l’accélère également. Pourquoi cela arrive-t-il? Puis-je quand même utiliser les commandes imbriquées?

18
BBales

Comme la substitution de commande se trouve entre guillemets, elle est évaluée au moment de la définition de la commande. Cela provoque find à parcourir le contenu de votre disque dur pendant que .bashrc est en cours d'exécution.

Vous semblez, au contraire, vouloir le faire évaluer au moment de son utilisation. Dans ce cas, utilisez des guillemets simples:

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

Notez que cet alias échouera si l'un des fichiers trouvés a un espace dans leur nom. Pour éviter cela:

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

Ce dernier formulaire fonctionnera de manière fiable pour tout type de nom de fichier.

44
John1024