Os aliases são específicos para o shell, portanto, quando você executa seu script assim:
#!/bin/bash
...
unalias ....
...
Ele está sendo executado como um shell filho, que normalmente não possui os mesmos aliases. Compondo o problema, você também está lidando com outro problema. Assim que o script terminar, o shell filho cujos aliases foram removidos desaparece, retornando você ao shell pai que ainda tem seus aliases intactos.
Não tenho como saber que os aliases do seu shell atual foram modificados dessa maneira.
Então, como fazer isso?
Você pode construir um alias ou uma função dentro do escopo do próprio shell atual para executar esta ação.
Exemplo
solução de alias
$ alias unalias_local='egrep "alias [[:alnum:]]+" local_alias -o|while read i; do un$i; done'
solução de função
$ function unalias_local { egrep "alias [[:alnum:]]+" local_alias -o | \
while read i; do un$i; done; }
Problemas com o acima
O OP forneceu essas soluções para essa resposta, que ele afirmou que funcionará em seu cenário. Mas, em geral, você não pode alterar os aliases em uma cadeia de comandos canalizados como este, porque cada pipe invoca um subshell, que não poderá tocar o shell do pai. Então, voltamos ao mesmo problema anterior ao script.
Para contornar isso, você poderia fornecer a lista de aliases como argumentos para um comando.
Exemplo
$ alias ali1="cmd1"
$ alias ali2="cmd2"
Confirme os aliases no nosso shell:
$ alias | grep -E "ali[12]"
alias ali1='cmd1'
alias ali2='cmd2'
Conteúdo de local_alias
:
$ cat local_alias
alias ali1="cmd1"
alias ali2="cmd2"
Este comando irá analisar nossos nomes dos aliases do arquivo local_alias
:
$ grep -oP "(?<=alias )([[:alnum:]]+)" local_alias
ali1
ali2
Podemos usá-lo para unalias
desses aliases da seguinte forma:
$ unalias $(grep -oP "(?<=alias )([[:alnum:]]+)" local_alias)
$
Agora, quando confirmamos que eles desapareceram:
$ alias | grep -E "ali[12]"
$