Mi .bashrc
archivo contiene una línea a este efecto:
alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
Cuando comento esta línea, Bash comienza casi instantáneamente cuando abro una nueva terminal. Con esta línea, hay un retraso de 4-5 segundos antes de que aparezca mi cursor.
Eliminar los comandos anidados $(pwd)
, etc., también lo acelera nuevamente. ¿Por qué está pasando esto? ¿Puedo seguir usando comandos anidados de alguna manera?
find
comando, que se ejecuta en el momento del arranque y puede tardar mucho tiempo en ejecutarse, dependiendo de la estructura del directorio. Si usa comillas simples en lugar de comillas dobles,find
se ejecutará en tiempo de ejecución, cuandoalias
se invoca. Depende del directorio de trabajo que desee usar, el actual en el momento de la declaración o el tiempo de ejecución. Por cierto,$(pwd)
es una forma bastante ineficiente de expresar.
o$PWD
.find
? Una vez que lo instaló, ya sabe dónde está. Incluso si lo actualiza con frecuencia y cambia su nombre, puede mantener un enlace simbólico para que siempre esté disponible con un nombre fijo.Respuestas:
Debido a que la sustitución del comando está entre comillas dobles, se evalúa en el momento en que se define el comando. Esto hace
find
que revise el contenido de su disco duro mientras se.bashrc
está ejecutando.Por el contrario, parece querer evaluarlo en el momento de su uso. En ese caso, use comillas simples:
Tenga en cuenta que este alias fallará si alguno de los archivos encontrados tiene espacios en blanco en sus nombres. Para evitar eso:
Este último formulario funcionará de manera confiable para cualquier tipo de nombre de archivo.
fuente
prog
,find
debería ejecutarse, mientras que antes, solo se ejecutaría una vez (en el inicio del shell).find
suele ser mucho más rápido.prog
y volver a ejecutarlafind
si la ruta anterior ya no existe?