alias
é um comando interno, por isso não aparece como script em nenhum arquivo ou como função. O comando type
mostrará isso:
$ type alias
alias is a shell builtin
Mas você ainda pode substituí-lo. Uma função com o mesmo nome irá mascarar o builtin, a menos que seja explicitamente chamado com o builtin
builtin.
Então, algo assim deve funcionar:
alias() {
if [ "$1" = "-p" ]; then
echo "-p was given";
shift;
fi;
builtin alias "$@";
}
Se você quiser imprimir a mesma atribuição de alias em um arquivo, é necessário ter cuidado para citá-lo corretamente, para que seja utilizável como entrada para o shell.
Algo parecido com isso pode ser feito (adicionado logo após o shift
na função), mas teste-o: printf "alias %q\n" "$@" >> ~/my.alias.file
Quanto ao problema Bash vs. Zsh, acho que o acima funciona com ambos, mas não sou especialista em Zsh.
A propósito, você também pode querer observar que o alias
do Bash já tem uma -p
opção help alias
diz:
Options:
-p print all defined aliases in a reusable format
Não sei se é de alguma utilidade, já que o comportamento padrão de alias
sem argumentos é também imprimir todos os aliases em um formato reutilizável.