Del manual de bash
Las reglas relativas a la definición y uso de alias son algo confusas. Bash siempre lee al menos una línea completa de entrada antes de ejecutar cualquiera de los comandos en esa línea. Los alias se expanden cuando se lee un comando, no cuando se ejecuta. Por lo tanto, una definición de alias que aparece en la misma línea que otro comando no tiene efecto hasta que se lea la siguiente línea de entrada. Los comandos que siguen a la definición de alias en esa línea no se ven afectados por el nuevo alias. Este comportamiento también es un problema cuando se ejecutan funciones. Los alias se expanden cuando se lee una definición de función, no cuando se ejecuta la función , porque una definición de función es en sí misma un comando compuesto. Como consecuencia, los alias definidos en una función no están disponibles hasta después de que se ejecuta esa función . Para estar seguro, siempre coloque las definiciones de alias en una línea separada y no use alias en comandos compuestos.
Las dos oraciones "Los alias se expanden cuando se lee una definición de función, no cuando se ejecuta la función" y "los alias definidos en una función no están disponibles hasta después de que se ejecuta esa función" parecen ser opuestos entre sí.
¿Puedes explicar lo que significan respectivamente?

.bashrcarchivos en la parte superior.Respuestas:
Los alias se expanden cuando se lee una definición de función, no cuando se ejecuta la función ...
$ echo "El rápido zorro marrón salta sobre el perro perezoso". > myfile $ alias myalias = gato $ myfunc () { > myalias myfile >} $ myfunc El rápido zorro marrón salta sobre el perro perezoso. $ alias myalias = "ls -l" $ myalias myfile -rw-r - r-- 1 myusername mygroup 45 dic 13 07:07 myfile $ myfunc El rápido zorro marrón salta sobre el perro perezoso.A pesar de que
myfuncse definió para llamarmyalias, y lo he redefinidomyalias,myfuncaún se ejecuta la definición original demyalias. Porque el alias se expandió cuando se definió la función. De hecho, el shell ya no recuerda esasmyfuncllamadasmyalias; solo sabe quemyfuncllamacat:$ type myfunc myfunc es una función myfunc () { gato myfile }... los alias definidos en una función no están disponibles hasta que se ejecuta esa función.
$ echo "El rápido zorro marrón salta sobre el perro perezoso". > myfile $ myfunc () { > alias myalias = gato >} $ myalias myfile -bash: myalias: comando no encontrado $ myfunc $ myalias myfile El rápido zorro marrón salta sobre el perro perezoso.El
myaliasalias no está disponible hastamyfuncque se haya ejecutado la función. (Creo que sería bastante extraño si la definición de la función que define el alias fuera suficiente para causar la definición del alias).fuente
Necesito la respuesta que se indica en la primera oración cuando intento debajo del fragmento en mi
.bashrc.después
unalias -a; source ~/.bashrc, trato de ejecutarlfylsf,Parece claro que los alias se expanden en la definición de la función, no en la ejecución de la función, ya que :
lf, el error-bash: ll: command not foundylsf,/usr/bin/lsse usa, no la forma de alias, sin resaltado de color y sin caracteres de control después del archivo ejecutable.fuente