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?
.bashrc
archivos 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 ...
A pesar de que
myfunc
se definió para llamarmyalias
, y lo he redefinidomyalias
,myfunc
aú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 esasmyfunc
llamadasmyalias
; solo sabe quemyfunc
llamacat
:... los alias definidos en una función no están disponibles hasta que se ejecuta esa función.
El
myalias
alias no está disponible hastamyfunc
que 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 ejecutarlf
ylsf
,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 found
ylsf
,/usr/bin/ls
se usa, no la forma de alias, sin resaltado de color y sin caracteres de control después del archivo ejecutable.fuente