Simplesmente não use aliases em scripts. Não faz sentido usar um recurso projetado para uso interativo em scripts. Em vez disso, use funções:
somecommand () {
ls -alF
}
As funções são muito mais flexíveis do que os aliases. O seguinte sobrecarregaria o usual ls
com uma versão que sempre faz ls -F
(argumentos são passados em $@
, incluindo qualquer sinalizador que você usa), praticamente como faria o alias alias ls="ls -F"
:
ls () {
command ls -F "$@"
}
O command
aqui impede que o shell entre em uma recursão infinita, o que, de outra forma, faria, já que a função também é chamada ls
.
Um alias nunca seria capaz de fazer algo assim:
select_edit () {
if [ ! -d "$1" ]; then
echo 'Not a directory' >&2
return 1
fi
select file in $(find "$1" -maxdepth 1 -type f); do
if [ -f "$file" ]; then
${EDITOR:-vi} "$file"
break
fi
echo 'No such file' >&2
done
}
Isso cria a função select_edit
, que pega o diretório como um argumento e solicita ao usuário que escolha um arquivo nesse diretório. O arquivo escolhido será aberto em um editor para edição.
O manual bash
contém a declaração
For almost every purpose, aliases are superseded by shell functions.