Não funciona porque o alias
é executado em um subshell que sai imediatamente depois disso. Isso nunca afeta o shell que iniciou o pipeline.
Você deve tentar algo como:
for short in ~/.shortcuts/* ; do
alias $(basename $short)="cd -P $short"
done
Isso pressupõe que você não possui arquivos com caracteres engraçados (como espaços em branco) em seus nomes nessa pasta.
(De um modo geral, não analisa a saída de ls
, use as funções globbing do seu shell.)