Alias and functions
Aliases are expanded when a function definition is read, not when the function is executed …
$ echo "The quick brown fox jumps over the lazy dog." > myfile $ alias myalias=cat $ myfunc() { > myalias myfile > } $ myfunc The quick brown fox jumps over the lazy dog. $ alias myalias="ls -l" $ myalias myfile -rw-r--r-- 1 myusername mygroup 45 Dec 13 07:07 myfile $ myfunc The quick brown fox jumps over the lazy dog.
Even though
myfunc
was defined to callmyalias
, and I’ve redefinedmyalias
,myfunc
still executes the original definition ofmyalias
. Because the alias was expanded when the function was defined. In fact, the shell no longer remembers thatmyfunc
callsmyalias
; it knows only thatmyfunc
callscat
:$ type myfunc myfunc is a function myfunc () { cat myfile }
… aliases defined in a function are not available until after that function is executed.
$ echo "The quick brown fox jumps over the lazy dog." > myfile $ myfunc() { > alias myalias=cat > } $ myalias myfile -bash: myalias: command not found $ myfunc $ myalias myfile The quick brown fox jumps over the lazy dog.
The
myalias
alias isn’t available until themyfunc
function has been executed. (I believe it would be rather odd if defining the function that defines the alias was enough to cause the alias to be defined.)