-
Os aliases são expandidos quando uma definição de função é lida, não quando a função é executada…
$ 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.
Mesmo que
myfunc
tenha sido definido para chamarmyalias
, e eu redefinedmyalias
,myfunc
ainda executa a definição original demyalias
. Porque o alias foi expandido quando a função foi definida. Na verdade, o shell não lembra mais quemyfunc
callsmyalias
; ele sabe apenas quemyfunc
chamacat
:$ type myfunc myfunc is a function myfunc () { cat myfile }
-
… aliases definidos em uma função não estão disponíveis até depois que a função é executada.
$ 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.
O alias
myalias
não está disponível até que a funçãomyfunc
tenha sido executada. (Eu acredito que seria um pouco estranho se definir a função que define o alias foi o suficiente para fazer com que o pseudônimo fosse definido.)