Esta é uma limitação do bash. Citando o manual:
The rules concerning the definition and use of aliases are somewhat confusing.
O Bash expande os aliases quando lê um comando. Um comando, nesse sentido, consiste em comandos completos (todo o bloco if … fi
é um comando composto) e linhas completas (portanto, se você escreveu … fi; WeirdTest
em vez de colocar uma nova linha após fi
, a segunda ocorrência de WierdTest
não seria expandido também). Em seu script, quando o comando if
está sendo lido, o WeirdTest
alias ainda não existe.
Uma solução possível é definir uma função:
if …; then
WeirdTest () { uptime; }
WeirdTest
fi
WeirdTest
Se você quiser usar um alias para poder chamar um comando externo com o mesmo nome, você pode fazer isso com uma função adicionando command
antes.
WeirdTest () { command WeirdTest --extra-option "$@"; }