-
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
myfunctenha sido definido para chamarmyalias, e eu redefinedmyalias,myfuncainda 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 quemyfunccallsmyalias; ele sabe apenas quemyfuncchamacat:$ 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
myaliasnão está disponível até que a funçãomyfunctenha 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.)