Mon .bashrc
dossier 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.
La suppression des commandes imbriquées $(pwd)
, etc. accélère à nouveau également. Pourquoi cela arrive-t-il? Puis-je quand même utiliser les commandes imbriquées?
find
commande, qui est exécutée au démarrage et peut être longue à exécuter, selon la structure du répertoire. Si vous utilisez des guillemets simples au lieu de guillemets doubles,find
sera exécuté au moment de l'exécution, lorsque lealias
est invoqué. Cela dépend du répertoire de travail que vous souhaitez utiliser, celui en cours au moment de la déclaration ou au moment de l'exécution. Soit dit en passant$(pwd)
est une façon plutôt inefficace d'exprimer.
ou$PWD
.find
? Une fois que vous l'avez installé, vous savez où il se trouve. Même si vous le mettez à jour fréquemment et changez son nom, vous pouvez conserver un lien symbolique vers celui-ci afin qu'il soit toujours disponible sous un nom fixe.Réponses:
Étant donné que la substitution de commandes se trouve entre guillemets doubles, elle est évaluée au moment où la commande est définie. Cela permet
find
de parcourir le contenu de votre disque dur pendant.bashrc
son exécution.En revanche, vous semblez vouloir qu'il soit évalué au moment de l'utilisation. Dans ce cas, utilisez des guillemets simples:
Notez que cet alias échouera si l'un des fichiers trouvés contient des espaces dans leurs noms. Pour éviter cela:
Cette dernière forme fonctionnera de manière fiable pour tout type de nom de fichier.
la source
prog
,find
il faudrait l'exécuter, alors qu'avant, il ne serait exécuté qu'une seule fois (au démarrage du shell).find
c'est généralement beaucoup plus rapide.prog
et réexécuterfind
si l'ancien chemin d'accès n'existe plus?